圣杯:拆分包含管道的字符串

2022-09-01 07:12:39

我正在尝试拆分一个 .简单的示例有效:String

groovy:000> print "abc,def".split(",");
[abc, def]===> null
groovy:000>

但是我需要在管道上拆分它而不是逗号,并且我没有得到所需的结果:

groovy:000> print "abc|def".split("|");
[, a, b, c, |, d, e, f]===> null
groovy:000>

因此,我的首选当然是从管道()切换到逗号()作为分隔符。|,

但现在我很好奇:为什么这不起作用?逃离管道()似乎没有帮助:\|

groovy:000> print "abc|def".split("\|");
ERROR org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed, groovysh_parse: 1: unexpected char: '\' @ line 1, column 24.
   print "abcdef".split("\|");
                          ^

1 error
|
        at java_lang_Runnable$run.call (Unknown Source)
groovy:000>

答案 1

您需要拆分 。\\|


答案 2

你必须逃逸管道,因为它确实在正则表达式中具有特殊含义。但是,如果您使用引号,则还必须转义斜杠。基本上,有两个选项:

asserts "abc|def".split("\\|") == ['abc','def']

或使用 as 字符串分隔符以避免额外的转义/

asserts "abc|def".split(/\|/) == ['abc','def']