如何在.NET中只替换Regex匹配字符串的一部分?

时间:2017-03-15 16:42:10

标签: .net regex replace

给出字符串:“+ 49(0)162 12345 0162”

正则表达式:^(+ \ s * 4 \ s * 9 \ s *(\ s * 0 \ s *)| + \ s * 4 \ s * 9 | 0 \ s * 0 \ s * 4 \ S * 9 | 0 |(\ S * 0 \ S *))\ S *(15 | 16 | 17)

匹配:“+ 49(0)16”

现在我想在16之前更换所有内容,以便产生“162 12345 0162”。

我到目前为止:

        Regex regex = new Regex( @"^(\+\s*4\s*9\s*\(\s*0\s*\)|\+\s*4\s*9|0\s*0\s*4\s*9|0|\(\s*0\s*\))\s*(15|16|17)");
        string result = regex.Replace( "+49 ( 0 ) 162 12345 0162", "" );

但是返回“2 12345 0162”。

谢谢!

2 个答案:

答案 0 :(得分:1)

(15|16|17)您的模式的一部分 - 第二个捕获组 - 匹配并捕获16。因此,您需要替换为$2反向引用。

string result = regex.Replace( "+49 ( 0 ) 162 12345 0162", "$2" );

请参阅regex demo

enter image description here

答案 1 :(得分:0)

最后(15|16|17)真的有必要吗?删除它将为您提供所需的结果。