假设我有以下正则表达式:
-(\d+)-
我想使用C#将Group 1 (\d+)替换为AA,以获得:
(\d+)
AA
-AA-
现在,我使用以下方法替换它:
var text = "example-123-example"; var pattern = @"-(\d+)-"; var replaced = Regex.Replace(text, pattern, "-AA-");
但是我并不是很喜欢这样,因为如果我更改模式以匹配_(\d+)_,那么我也将不得不替换替换字符串_AA_,这违反了DRY原则。
_(\d+)_
_AA_
我正在寻找类似的东西:
使匹配的文本保持原样,但将Group 1 by this text和Group 2 by another text…
this text
another text
编辑: 那只是一个例子。我只是在寻找一种通用的方式来做我上面说的话。
它适用于:
anything(\d+)more_text 以及您可以想象的任何模式。
anything(\d+)more_text
我要做的就是只替换组,并保留其余的比赛。
一个好主意是将所有内容封装在组中,无论是否需要标识它们。这样,您可以在替换字符串中使用它们。例如:
var pattern = @"(-)(\d+)(-)"; var replaced = Regex.Replace(text, pattern, "$1AA$3");
或使用MatchEvaluator:
var replaced = Regex.Replace(text, pattern, m => m.Groups[1].Value + "AA" + m.Groups[3].Value);
有点混乱的另一种方法是使用后向/超前:
(?<=-)(\d+)(?=-)