在 C# 中仅检索正则表达式的替换模板
Retrive only replacement template of regex in C#
我可以只得到 Regex.Replace 的替代品吗?
例子。
String text = @"asdfgs sda gsa ga s
SECTOR:124 NAME:Ricko
asdfgs sda gsa ga s";
String regex = "^SECTOR:(\d+) NAME:(\w+)";
String substitution = " ";
String result = Regex.Replace(text, regex, substitution);
Console.WriteLine(result);
正常结果
asdfgs sda gsa ga s
Ricko 124
想要的结果
Ricko 124
Thaaaanks
您应该使用 Regex.Match
提取文本,然后连接第 2 组和第 1 组值:
Match m = Regex.Match(text, regex, RegexOptions.Multiline);
if (m.Success) {
String result = $"{m.Groups[2].Value} {m.Groups[1].Value}";
Console.WriteLine(result);
}
参见C# demo。
注:
添加 RegexOptions.Multiline
因为您的字符串包含多行,并且您需要将行的开头与 ^
匹配
Regex.Match
returns 字符串中的第一个匹配项
if (m.Success)
用于检查给定的字符串和模式是否匹配
m.Groups[1].Value
包含第一个捕获组值,m.Groups[2].Value
包含第二个捕获组值,依此类推。
您没有匹配您想要保留但应删除的内容周围的所有字符。
您可以让点匹配换行符并使用多行标志作为锚点。
(?sm).*?^SECTOR:(\d+) NAME:(\w+).*
模式匹配:
(?sm)
具有匹配换行符和多行符的点的内联标志
.*?
尽可能少地匹配包括换行符在内的任何字符
^
字符串开头
SECTOR:(\d+) NAME:(\w+)
第 1 组 中 SECTOR: 捕获 1+ 个数字,并在 [=30] 中捕获 1+ 个字符=]组 2 NAME:
.*
匹配其余行
例子
String text = @"asdfgs sda gsa ga s
SECTOR:124 NAME:Ricko
asdfgs sda gsa ga s";
String regex = @"(?sm).*?^SECTOR:(\d+) NAME:(\w+).*";
String substitution = " ";
String result = Regex.Replace(text, regex, substitution);
Console.WriteLine(result);
输出
Ricko 124
我可以只得到 Regex.Replace 的替代品吗?
例子。
String text = @"asdfgs sda gsa ga s
SECTOR:124 NAME:Ricko
asdfgs sda gsa ga s";
String regex = "^SECTOR:(\d+) NAME:(\w+)";
String substitution = " ";
String result = Regex.Replace(text, regex, substitution);
Console.WriteLine(result);
正常结果
asdfgs sda gsa ga s
Ricko 124
想要的结果
Ricko 124
Thaaaanks
您应该使用 Regex.Match
提取文本,然后连接第 2 组和第 1 组值:
Match m = Regex.Match(text, regex, RegexOptions.Multiline);
if (m.Success) {
String result = $"{m.Groups[2].Value} {m.Groups[1].Value}";
Console.WriteLine(result);
}
参见C# demo。
注:
-
添加
RegexOptions.Multiline
因为您的字符串包含多行,并且您需要将行的开头与^
匹配
Regex.Match
returns 字符串中的第一个匹配项if (m.Success)
用于检查给定的字符串和模式是否匹配m.Groups[1].Value
包含第一个捕获组值,m.Groups[2].Value
包含第二个捕获组值,依此类推。
您没有匹配您想要保留但应删除的内容周围的所有字符。
您可以让点匹配换行符并使用多行标志作为锚点。
(?sm).*?^SECTOR:(\d+) NAME:(\w+).*
模式匹配:
(?sm)
具有匹配换行符和多行符的点的内联标志.*?
尽可能少地匹配包括换行符在内的任何字符^
字符串开头SECTOR:(\d+) NAME:(\w+)
第 1 组 中 SECTOR: 捕获 1+ 个数字,并在 [=30] 中捕获 1+ 个字符=]组 2 NAME:.*
匹配其余行
例子
String text = @"asdfgs sda gsa ga s
SECTOR:124 NAME:Ricko
asdfgs sda gsa ga s";
String regex = @"(?sm).*?^SECTOR:(\d+) NAME:(\w+).*";
String substitution = " ";
String result = Regex.Replace(text, regex, substitution);
Console.WriteLine(result);
输出
Ricko 124