在Java中,我使用String split方法拆分包含以分号分隔的值的字符串。
目前,我有以下一行在99%的情况下都有效。
String[] fields = optionsTxt.split(";");
但是,已添加要求以包含转义分号作为字符串的一部分。因此,以下字符串应解析为以下值:
"Foo foo;Bar bar" => [Foo foo] [Bar bar]
"Foo foo\; foo foo;Bar bar bar" => [Foo foo\; foo foo] [Bar bar bar]
这应该很简单,但我完全不确定如何去做。我只是想在有\时没有标记化;并且只有在有。;
时才进行标记化有没有人知道这个神奇的公式?
答案 0 :(得分:2)
试试这个:
String[] fields = optionsTxt.split("(?<!\\\\);");
答案 1 :(得分:1)
可能有更好的方法,但快速而肮脏的方法是先取代\;使用一些不会出现在输入缓冲区中的字符串,如{{ESCAPED_SEMICOLON}},然后执行tokenize;然后当你拉出每个标记时,反向执行原始替换以放回\;
答案 2 :(得分:1)
答案 3 :(得分:0)
仅使用您提供的示例,您可以使用上面的对象代码。如果您希望仅在分号前有偶数个反斜杠时才进行拆分,请尝试以下操作:
String[] fields = optionsTxt.split("((?<!\\\\)|(?<=[^\\\\](\\\\\\\\){0,15}));");
我随意挑选了15个。如果需要,可将其更改为更高的数字。