我需要拆分传递正则表达式的字符串,但拆分令牌只是正则表达式的第1组。一个例子:
Original String = "paulo\\;Is\\;In;Real;Doubt"
使用split = ["paulo\\;Is\\;In", "Real", "Doubt"]
我的第一个想法是使用正则表达式:[^\\\\][;]
但它显然不起作用。
输出为:["paulo\\;Is\\;I", "Rea", "Doubt"]
(我正在使用String.split()
方法。)
我的第二个想法是使用;
作为一个组:[^\\\\]([;])
,但我不能告诉split方法只将group(1)
视为拆分令牌。< / p>
答案 0 :(得分:3)
你的问题很难回答,因为它完全不清楚。你说你的拆分令牌“只是正则表达式的第1组”。正则表达式的第1组?
编辑:仍然很难回答,你为什么不澄清?无论如何,如果你想要的是“拆分';',但只有当它没有被'\'转义时”,那么你可以使用负面的lookbehind来获得你想要的东西。
示例:
"paulo\\;Is\\;In;Real;Doubt".split("(?<!\\\\);");
给出
[ "paulo\;Is\;In", "Real", "Doubt" ]
答案 1 :(得分:0)
问题是以下表达式为真:
("\;").equals(";")
所以你的原始字符串等于:
"paulo;Is;In;Real;Doubt"
答案 2 :(得分:0)
嗯,当我在
时遇到错误时,我不得不稍微修改你的输入String x = "paulo\\;Is\\;In;Real;Doubt";
String[] res = x.split("\\\\;");
答案 3 :(得分:0)
如果转义可以逃避任何事情,那么你最好只用一个直接的全局正则表达式来找到所有,只有一个捕获组。
原始正则表达式:
(?:(?<=;)|(?<=^))([^;\\]*(?:\\.[^;\\]*)*)(?:;|$)
扩展:
(?: // prevent (mitigate) re-capture of last field
(?<=;)
| (?<=^)
)
( [^;\\]* (?:\\.[^;\\]*)* ) // Capture the field, grp 1 (can be blank)
(?: // The delimiter or end o string
;
|
$
)