如何用正则表达式替换一些组?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (26)

假设我有以下正则表达式:

-(\d+)-

我想用C来代替第一组带着,以获得:

-AA-

现在我用:

var text = "example-123-example";
var pattern = @"-(\d+)-";
var replaced = Regex.Replace(text, pattern, "-AA-"); 

但我不喜欢这样,因为如果我改变模式相反,我必须将替换字符串更改为这也违背了干燥原则。

找这样的东西:

保持匹配的文本保持原样,但通过以下方式更改组1和第2组

编辑:

这只是一个例子。我只是在寻找一种通用的方法来做我上面说过的事情。

它应在以下方面发挥作用:

你能想象的任何模式。

我想做的就是只替换组,并保持其余的比赛。

提问于
用户回答回答于

一个好主意可能是封装在组内的所有东西,不管是否需要识别它们。这样,就可以在替换字符串中使用它们。例如:

var pattern = @"(-)(\d+)(-)";
var replaced = Regex.Replace(text, pattern, "$1AA$3"); 

或者使用匹配评估器:

var replaced = Regex.Replace(text, pattern, m => m.Groups[1].Value + "AA" + m.Groups[3].Value);

另一种稍微有点混乱的方法是使用“后视/展望”:

用户回答回答于

var pattern = @"(?<=-)\d+(?=-)";
var replaced = Regex.Replace(text, pattern, "AA"); 

扫码关注云+社区