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

gre*_*eet 6 c# regex

Regex.Replace说:

在指定的输入字符串中,将指定的正则表达式匹配的所有字符串替换为指定的替换字符串.

就我而言:

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);
Run Code Online (Sandbox Code Playgroud)

输出:

0x010102_default_prg_L2_
Run Code Online (Sandbox Code Playgroud)

但我在期待

0x010102_default_prg_L2_E2_LLC
Run Code Online (Sandbox Code Playgroud)

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

演示

Avi*_*Raj 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");
Run Code Online (Sandbox Code Playgroud)

DEMO

要么

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

  • @greenfeet为什么我需要将'$ 1 $ 2`更改为$ $ $ 3`,因为我删除了你的正则表达式中存在的第二个上限组.2.只需在`$ 1`和`$ 2`之间添加`abc`,即`$ 1abc $ 2`.对于第二个答案,只需`"abc"`而不是`string.Empty`就足够了. (2认同)
  • 你是对的,我没注意到你删除了第二组,谢谢! (2认同)