C#正则表达式重复模式中的数字组

时间:2016-02-12 12:02:58

标签: c# regex

我使用正则表达式

    pattern = "ID\\d+.*?ID\\d+";
    input="ID1...sometxt1...ID1...sometxt2...ID3...sometxt3...ID50"
    input=Regex.Replace(input, pattern, "");
    Console.WriteLine(input);

输出将=" ... sometxt2 ..."
但我需要输出
... sometxt2 ... ID3 ... sometxt3 ... ID50,

我需要正则表达式在ID之后找到具有相同数字的组。 ID3!= ID50,此组必须保留,ID1 == ID1 - 必须更换此组

感谢!

1 个答案:

答案 0 :(得分:1)

如果您需要替换其后具有相同数字的ID的整个子串,则需要使用具有反向引用的捕获组:

var pattern = @"\bID(\d+).*?\bID\1\b";

请参阅regex demo

<强>解释

  • \bID - 一个完整的词&#34; ID&#34;
  • (\d+) - 捕获到第1组的一个或多个数字
  • .*? - 除了换行符之外的任何字符,尽可能少的字符直到
  • \bID - 全文&#34; ID&#34;接下来....
  • \1 - 对第1组中匹配数字的反向引用
  • \b - 后跟字边界(如果我们在第1组中有10,我们就不会与1匹配。)

请注意,如果输入字符串中有换行符,则需要RegexOptions.Singleline修饰符。

另外,不要忘记将替换结果分配给变量:

var res = Regex.Replace(input, pattern, string.Empty);