我正在尝试执行类似以下的拆分:
println "Hello World(1)".split("W");
输出:
[Hello , orld(1)]
我想执行此拆分:
println "Hello World(1)".split("(");
但我明白了:
Caught: java.util.regex.PatternSyntaxException: Unclosed group near index 1 (
有没有办法可以逃脱这个括号?任何帮助表示赞赏。
答案 0 :(得分:52)
println "Hello World(1)".split("\\(");
答案 1 :(得分:19)
split
方法采用正则表达式模式。
如果要拆分“只是常规字符串”,可以先使用Pattern.quote
引用字符串:
println "Hello World(1)".split(Pattern.quote("("))
答案 2 :(得分:1)
使用groovy本机正则表达式语法时,您也可以使用单个转义符:
assert "Hello World(1)".split(/\(/) == ["Hello World", "1)"]
答案 3 :(得分:0)
你必须正确地转义括号字符
println "Hello World(1)".split("\\(")
答案 4 :(得分:0)
由于 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("("));