Regex只替换匹配的组,而忽略不匹配的组

本文关键字:不匹配 Regex 替换 | 更新日期: 2023-09-27 18:08:34

Regex。替换说明:

在指定的输入字符串中,替换与使用指定的替换字符串指定的正则表达式。

就我而言:

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(?我该如何解决这个问题以获得预期的输出?

演示

Regex只替换匹配的组,而忽略不匹配的组

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

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");

演示

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