2014-11-25 139 views
-1

请再次询问相同的正则表达式问题,但在此合并所有现有答案并不能给我带来好的结果。 (例如“aa | bb”.split(myregex))我需要用“|”分割一次字符串,其他时间由“||”。正则表达式匹配特殊字符的确切实例

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

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

Regards,

+0

请参阅http://stackoverflow.com/a/18252327/493759 – 2014-11-25 13:57:52

回答

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,}"); 
0

如何:

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

这将匹配未先前的管道ed也没有遵循另一个管道或大于或等于2的管道数量。