正则表达式在java split函数中包含逗号

问题描述 投票:0回答:1

我想要一个分割函数,根据分隔符“,”分割字符串,但在某些情况下不应将其视为分隔符。

可以说:

String= "one,two,three"

Array=String.split(",");

Arrayoutput=["one","two","three"];

那么如果

String="one,two\\,three";

Array=String.split("???");

so the output =["onetwo,",three];

那么如何编写正则表达式来代替“???”因此它包含“,”但不包含“\,”。类似于“([,]&[^\,])”。

此外,何时将逗号读取为字符串而不是分隔符是可配置的,我现在使用 \ 但可以是任何东西。

P.S:我可以用以下伪代码解决它:

for(int i=0;i<s.length();i++){

if(s.charAt(i)=="\\,"){}

else if(s.charAt(i)==','){then split it;}

}

但我正在寻找最有效和最快的解决方案,关于如何处理这个问题还有其他想法吗?

java regex split delimiter backslash
1个回答
-1
投票

您可能希望在后面进行否定查找,它将查找前面有反斜杠的逗号而不是。许多反斜杠是必要的,因为我们不仅需要转义字符串中的反斜杠,还需要转义生成的正则表达式。

"(?<!\\\\),"

Java 12 及更高版本支持原始字符串文字,可以帮助我们避免这种转义。

`(?<!\\\\),`

现在,如果我们只想在反斜杠前面的逗号上进行分割,我们可以使用 positive 向后看。

`(?<=\\)`

Python 演示,因为它是交互式解释器,以易于理解的方式呈现信息。 Python 有自己的原始字符串语法,正则表达式是相同的。

>>> import re
>>> re.split(r"(?<!\\),", r"1,2\,3")
['1', '2\\,3']
>>> re.split(r"(?<=\\),", r"1,2\,3")
['1,2\\', '3']
© www.soinside.com 2019 - 2024. All rights reserved.