Предположим, у меня есть следующее регулярное выражение:
-(\d+)-
и я хочу заменить, используя C #, группу 1 (\d+)
на AA
, чтобы получить:
-AA-
Теперь я заменяю его, используя:
var text = "example-123-example";
var pattern = @"-(\d+)-";
var replaced = Regex.Replace(text, pattern, "-AA-");
Но мне это не очень нравится, потому что если я _(\d+)_
вместо этого изменю шаблон , мне придется изменить строку замены _AA_
тоже, и это противоречит принципу СУХОЙ.
Я ищу что-то вроде:
Сохраняйте сопоставленный текст в точности таким, какой он есть, но измените Группу 1 на this text
и Группу 2 на another text
...
Редактировать:
это был просто пример. Я просто ищу общий способ сделать то, что я сказал выше.
Это должно работать для:
anything(\d+)more_text
и любой шаблон, который вы можете себе представить.
Все, что я хочу сделать, это заменить только группы и сохранить остаток матча.
:)
. На мой взгляд, это решение намного лучше и чище, чем использование lookahead и lookbehinds..Value
иm.Groups[1]
т. Д.(?:foo)(bar)
,$1
заменитbar
. подробнееВы можете сделать это используя lookahead и lookbehind :
источник
Я также нуждался в этом, и я создал следующий метод расширения для этого:
Использование:
Результат:
источник
Если вы не хотите изменять свой шаблон, вы можете использовать свойства Group Index и Length соответствующей группы.
источник
Вот еще один хороший чистый вариант, который не требует изменения вашего шаблона.
источник
пройдите приведенную ниже кодировку, чтобы получить замену отдельной группы.
источник
Вот версия, похожая на версию Дэниела, но заменяющая несколько совпадений:
источник