Regex заменяет найденное совпадение статическим словом - PullRequest
2 голосов
/ 02 мая 2019

Мой ввод:

Foo 12;
Foo 5534;
Foo 1;

хочу заменить

Foo (\d+?); до Foo NUM;

В результате это будет:

Foo NUM;
Foo NUM;
Foo NUM;

Мой шаблон:

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

Но это, похоже, не работает. Что там не так?

Ответы [ 3 ]

5 голосов
/ 02 мая 2019

В вашем коде вы соответствуете Foo (\d+?); и заменяете это совпадение на NUM, что будет буквальным результатом.Но при замене вы хотите сохранить не цифры, а FOO

. Вы можете сделать замену наоборот, используя группу захвата для Foo и используя эту группу захвата в замене.

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

Вы можете не указывать \d+ не жадный, используя вопросительный знак.

Regex demo | C # демо

enter image description here

2 голосов
/ 02 мая 2019

Решение без регулярных выражений

Если вашим последним словом является всегда число и вы хотите заменить его на «NUM», то вы можете сделать это как-то так:

line.Replace(line.Split(' ').Last(), "NUM");

POC: .Net Fiddle

0 голосов
/ 02 мая 2019

используйте это регулярное выражение:

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

вам просто нужно @ перед регулярным выражением.Здесь вы можете проверить свои регулярные выражения:

регулярное выражение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...