如何通过加倍正则表达式

时间:2015-08-14 07:12:51

标签: c# regex

我需要在分隔符上拆分字符串,但不要将分隔符加倍。

例如"\m55.\m207|DEFAULT||DEFAULT|55||207"一旦拆分应该导致

  • \ M55。\ M207
  • DEFAULT || DEFAULT
  • 55 || 207

我正在尝试使用正则表达式执行此操作。如果它有所作为,我正在使用C#System.Text.RegularExpression.Regex

到目前为止,我有"[^|]\|[^|]",但是它无法处理分隔符旁边的转义分隔符的位置。 IE |||

我确信网络上有解决方案,但我尝试使用多个不同的字词进行搜索,但找不到正确的术语组合来查找它。

如何通过在正则表达式中将其加倍来逃避分隔符?或者如果有一个更简单的解决方案是什么?

修改

这是一个更复杂的例子:

输入:“\ m55。\ m207 | DEFAULT || DEFAULT ||| 55 || 207” 预期产出:

  • “\ M55。\ M207”
  • “DEFAULT || DEFAULT ||”
  • “55 || 207”

2 个答案:

答案 0 :(得分:3)

因为您的演示非常简单,并且您只想使用单个|拆分,所以我可以在这里使用\b

string txt = @"\m55.\m207|DEFAULT||DEFAULT|55||207";
string patten = @"\b\|\b";
foreach (var str in Regex.Split(txt, patten))
{
    Console.WriteLine(str);
}

答案 1 :(得分:1)

(?<=[^|](?:\|{2})+)\|(?!\|)|(?<!\|)\|(?!\|)

您需要使用lookarounds来确保仅在一个|上进行拆分。

See Demo