我希望有一个split函数,根据分隔符“”拆分String,但在某些情况下不应将其作为分隔符。
让我们说:
String= "one,two,three"
Array=String.split(",");
Arrayoutput=["one","two","three"];
字符串
则如果
String="one,two\\,three";
Array=String.split("???");
型
所以输出=[“one”,“two,three”];
那么如何编写正则表达式来代替“呢???”,因此它包括“,”但不包括“\,”。类似于“([,]&[^\,])”。
此外,何时将逗号而不是分隔符读取为字符串是可配置的,我现在采取\,但可以是任何东西。
P.S:我可以用下面的伪代码来解决它:
for(int i=0;i<s.length();i++){
if(s.charAt(i)=="\\,"){}
else if(s.charAt(i)==','){then split it;}
}
型
但我正在寻找最有效和最快的解决方案,任何其他想法如何处理这一点?
2条答案
按热度按时间yjghlzjz1#
你应该使用Negative Look Behind。您可以在regexp10.com中查看此内容。
字符串
然后客户端的代码看起来像这样:
型
chhqkbe12#
您可能需要一个negative look behind,它将查找逗号 not 前面有一个反斜杠。许多反斜杠是必要的,因为我们不仅需要转义字符串中的反斜杠,而且需要转义结果正则表达式中的反斜杠。
字符串
在Java 12和更高版本中,支持原始字符串字面量,并且可以使我们避免一些这种转义。
型
现在,如果我们只想在逗号前面加上一个反斜杠,我们会使用一个 positive look behind。
型
Python中的演示,因为它的交互式解释器以易于理解的方式呈现信息。Python有自己的原始字符串语法,* 正则表达式 * 本身是相同的。
型