正则表达式只替换匹配组并忽略不匹配的组?

时间:2015-08-18 13:08:26

标签: c# regex

Regex.Replace说:

  

在指定的输入字符串中,替换匹配a的所有字符串   使用指定的替换字符串指定正则表达式。

就我而言:

string w_name = "0x010102_default_prg_L2_E2_LDep1_LLC";
string regex_exp = @"(?:E\d)([\w\d_]+)(?:_LLC)";
w_name = Regex.Replace(w_name, regex_exp, string.Empty);

输出:

0x010102_default_prg_L2_

但我期待

0x010102_default_prg_L2_E2_LLC

为什么要替换我的非匹配组(组1和组3)?我如何解决这个问题以获得预期的输出?

Demo

1 个答案:

答案 0 :(得分:5)

将第一个和最后一个非捕获组转为捕获组,以便您可以在替换部件中引用这些字符并删除不必要的第二个捕获组。

string w_name = "0x010102_default_prg_L2_E2_LDep1_LLC";
string regex_exp = @"(E\d)[\w\d_]+(_LLC)";
w_name = Regex.Replace(w_name, regex_exp, "$1$2");

DEMO

string regex_exp = @"(?<=E\d)[\w\d_]+(?=_LLC)";
w_name = Regex.Replace(w_name, regex_exp, string.Empty);