正则表达式匹配特殊字符的确切实例

时间:2014-11-25 13:51:31

标签: java regex

请原谅再次询问相同的正则表达式问题,但在此结合所有现有答案并不能给我带来好结果。

在Java中(如“aa | bb”.split(myregex))我需要将字符串拆分一次“|”其他时间由“||”。

请注意“|”不得与“||”的外观相匹配或“|||”。例如,“|”的正则表达式一定不要碰“aa || bb”。但是“||”的正则表达式应该将所有“||”+分开,如“aa || bb”和“aa |||| bb”一样。 我尝试了不同的\ b(?:( [\ |])(?!\ 1))+ \ b的变体,但这对于在线正则表达式检查器有不好的结果。

请帮忙。与我们分享两个正则表达式。

此致

2 个答案:

答案 0 :(得分:0)

两次迭代?

result1 = myString.split("[^\\|]\\|[^\\|]"); // result of splitting on |, regex means | not followed by another | or preceded
result2 = result1.split("\\|{2,}"); // result of splitting on | that occurs 2 or more times

不确定如何拆分| -es的奇数,但是如果你只需要偶数:

result2 = result1.split("(\\|\\|)+"); // result of splitting on || that occur any times

也许更具可读性:

String not(String s){
  return "[^" + s + "]";
}
String pipe = "\\|";

result1 = myString.split(not(pipe) + pipe + not(pipe)); 
result2 = result1.split(pipe + "{2,}"); 

答案 1 :(得分:0)

怎么样:

(?:(?<!\\|)\\|(?:\\|)|\\|{2,})

这将匹配不在其他管道之前或之后的管道或大于或等于2的管道数。