我正在尝试执行类似于以下的拆分:
println "Hello World(1)".split("W");
输出:
[Hello , orld(1)]
我想执行这个拆分:
println "Hello World(1)".split("(");
但我看到:
Caught: java.util.regex.PatternSyntaxException: Unclosed group near index 1 (
有没有办法可以逃避这个括号?任何帮助表示赞赏。
我正在尝试执行类似于以下的拆分:
println "Hello World(1)".split("W");
输出:
[Hello , orld(1)]
我想执行这个拆分:
println "Hello World(1)".split("(");
但我看到:
Caught: java.util.regex.PatternSyntaxException: Unclosed group near index 1 (
有没有办法可以逃避这个括号?任何帮助表示赞赏。
println "Hello World(1)".split("\\(");
该split方法采用正则表达式模式。
如果你想分割“只是一个普通的字符串”,你可以Pattern.quote先用引号括起来:
println "Hello World(1)".split(Pattern.quote("("))
您必须正确转义括号字符
println "Hello World(1)".split("\\(")
在使用 groovy 本机正则表达式语法时,您还可以使用单个转义:
assert "Hello World(1)".split(/\(/) == ["Hello World", "1)"]
由于split只接受正则表达式,因此您必须将其作为转义字符传递给它。为此,您必须在其前面附加一个反斜杠
\(
但是上面有一个编译错误,因为它被解析为一个有效的转义字符,例如:
\t Tab
\n New Line or Line Feed
\r Carriage Return
因此,您必须传递带有 2 个反斜杠的无意义字符(例如括号):
\\(
最后:
println "Hello World(1)".split("\\(");
或者,您也可以通过名为quote的类Pattern的 java 内置函数来做所有事情:
println "Hello World(1)".split(Pattern.quote("("));