我使用正则表达式
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 - 必须更换此组
感谢!
答案 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);