当前位置: 首页 > 知识库问答 >
问题:

用正则表达式替换字符串时未关闭的字符类

许琛
2023-03-14

我想删除另一个字符串开头的字符串。

示例:

多亏了Regexr,我制作了这个regex:

/[\\][n](?:[0-9]*)[ ][:]/g

我尝试在Java中使用它。使用<代码>字符串。matches()我没有任何错误。但是,使用字符串。replaceFirst,我有以下错误:

java.util.regex.PatternSyntaxException: Unclosed character class near index 24
/[\][n](?:[0-9]*)[ ][:]/g
                        ^

我还试了什么?

  • 在开始处移除/,在结束处移除/g
  • 添加(模式)(如此处的regex中可见)
  • 多个其他的快速方式,但我的错误总是在我的正则表达式的最后一个字符

我的完整代码:

String str = "\n512 : something"; // I init my string
if(str.matches("/[\\][n](?:[0-9]*)[ ][:]/g"))
   str = str.replaceFirst("/[\\][n](?:[0-9]*)[ ][:]/g", "");

我怎样才能修复它?如何解决我的正则表达式模式?

共有1个答案

翟俊茂
2023-03-14

你可以用

.replaceFirst("\n[0-9]+\\s+:\\s*", "")

正则表达式匹配

  • \n-换行符(字符串中有换行符,而不是反斜杠和n
  • [0-9]-一个或多个数字
  • \s-一个或多个空格
  • -冒号
  • \s*-零个或多个空格

请参见Java演示:

List<String> strs = Arrays.asList("\n123 : other", "123 : other", "\n4 : smth", "123 : a");
for (String str : strs)
    System.out.println("\"" + str.replaceFirst("\n[0-9]+\\s+:\\s*", "") + "\"");

输出:

"other"
"123 : other"
"smth"
"123 : a"
 类似资料:
  • 问题内容: 我正在尝试使用正则表达式替换字符串中所有出现的英国汽车登记信息。 当字符串与以下正则表达式完全匹配时,以下swift代码可完美地用于a。 结果是 但是,以下操作无效,并且字符串未修改 结果是 谁能给我任何指示? 问题答案: 您需要删除和锚点。 该装置 开始字符串 和手段 结束字符串 (或行,这取决于选项)。这就是第一个示例起作用的原因:在第一个测试字符串中,字符串的开头实际上是您的模式

  • 我想使用Gson将字符串转换为Foo对象: 下面是我的正则表达式: 如何使用此正则表达式将所有,.和替换为,,而不更改JSON中的键和值?

  • 我需要替换以下字符串中的引号。 最终输出应该是“这是test()ing和test()ing”; i、 e仅当它以“test()开头,以”结尾时才替换。中间的文本保持不变。 这个坏了。 请为同样的问题推荐合适的正则表达式。

  • 本文向大家介绍正则表达式的字符串替换方法,包括了正则表达式的字符串替换方法的使用技巧和注意事项,需要的朋友参考一下 我有以下几行: d:\Projects\qqq\Development\qqq.MySol1.sln d:\Projects\qqq\qqqDevelopment\qqqMySol2.sln d:\Projects\qqq\Development\MyInstaller.sln d:

  • 问题内容: 我有以下几种可能的形式的字符串: 我希望能够将它正则化为,基本上替换和之间的所有内容。我试过了: 但这是行不通的。任何帮助表示赞赏。 PS 表示有一个换行符用于此目的。实际上不在那里。 问题答案: 您可以使用 并替换为。请参阅在线Go regex演示。 在这里,匹配并捕获子字符串(它将从替换模式中引用此值),并将匹配并消耗除换行符以外的任何0+字符,直至行尾。 参见Go演示: 输出:

  • 我有一根绳子: 我想将所有字符(#,)替换为(#),因此例外的输出是: 注意:我不知道字符串中有多少(#)或(#)序列 我尝试的是: 我试着写: 但结果是: 我的在线尝试 我尝试将(*)用于序列,但没有成功: 那么我如何才能得到我的例外输出?