我想要一个分割函数,根据分隔符“,”分割字符串,但在某些情况下不应将其视为分隔符。
可以说:
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 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']