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

标签 c# regex

Regex.Replace 说:

In a specified input string, replaces all strings that match a specified regular expression with a specified replacement string.

以我为例:

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

最佳答案

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

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

关于c# - 正则表达式只替换匹配的组并忽略不匹配的组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32073362/

相关文章:

regex - sed 中的正则表达式用于在一个语句中进行多次替换

JavaScript正则表达式在字符串中间查找单词

c# - 删除完整目录名称的一部分?

c# - 如何获取 WPF 应用程序的默认路径数据库位置?

php - 在每个单词后最多插入一个前导和尾随换行符

java - 如何正则表达式空格分隔的字母?

java - 使用正则表达式取消驼峰式 Java 字符串

C#:如何对 GetHashCode 进行单元测试?

c# - 如何在 RadioButtonList asp.net 控件的列表项之间添加空格?

c# - 序列化一个对象并反序列化为对象列表