模式中数字的C#regex重复组

模式中数字的C#regex重复组,c#,regex,C#,Regex,我使用正则表达式模式 pattern = "ID\\d+.*?ID\\d+"; input="ID1...sometxt1...ID1...sometxt2...ID3...sometxt3...ID50" input=Regex.Replace(input, pattern, ""); Console.WriteLine(input); 输出将=“…sometxt2…” 但我需要输出 …某物2…ID3…某物3…ID50 我需要正则表达式查找ID.ID3!=ID

我使用正则表达式模式

    pattern = "ID\\d+.*?ID\\d+";
    input="ID1...sometxt1...ID1...sometxt2...ID3...sometxt3...ID50"
    input=Regex.Replace(input, pattern, "");
    Console.WriteLine(input);
输出将=“…sometxt2…”
但我需要输出
…某物2…ID3…某物3…ID50

我需要正则表达式查找ID.ID3!=ID50,此组必须保留,ID1==ID1-必须替换此组


谢谢!

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

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

说明:

  • \bID
    -一个完整的单词“ID”
  • (\d+)
    -组1中捕获的一个或多个数字
  • *?
    -除换行符以外的任何字符,尽可能少到最接近的字符
  • \bID
    -整个单词“ID”后跟
  • \1
    -反向引用组1中匹配的数字
  • \b
    -后跟一个单词边界(因此,如果第1组中有
    1
    ,则我们不匹配
    10
请注意,如果输入字符串中有换行符,则需要
RegexOptions.Singleline
修饰符

此外,不要忘记将替换结果指定给变量:

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

也许可以使用
pattern=@“\bID(\d+).*?\bID\1\b”
var res=Regex.Replace(输入,pattern,”)谢谢!反向引用是个好主意。。。