正则表达式用静态词替换找到的匹配项

时间:2019-05-02 09:59:15

标签: c# regex

我的输入是:

Foo 12;
Foo 5534;
Foo 1;

我要替换

Foo (\d+?);Foo NUM;

结果将是:

Foo NUM;
Foo NUM;
Foo NUM;

我的模式是:

Regex.Replace(line, "Foo (\d+?);", "NUM");

但这似乎行不通。怎么了?

3 个答案:

答案 0 :(得分:5)

在您的代码中,您匹配Foo (\d+?);并将其替换为NUM,这将是字面结果。但是您要保留的不是数字而是FOO

您可以使用另一种方法进行替换,即使用Foo捕获组并在替换中使用该捕获组。

Regex.Replace(line, @"(Foo) \d+;", "$1 NUM;")

您可以忽略使用问号使\d+变得非贪婪。

Regex demo | C# demo

enter image description here

答案 1 :(得分:2)

不使用正则表达式的解决方案

如果您的姓氏始终是数字,并且您想将其替换为“ NUM”, 那么你可以做类似的事情

out

POC:.Net Fiddle

答案 2 :(得分:0)

使用此正则表达式:

Regex.Replace(line, @"Foo (\d+?);", "NUM;");

您只需要在正则表达式前输入@。 在这里您可以测试您的正则表达式:

regex test