Как мне заменить регулярные выражения на пронумерованные группы? - PullRequest
1 голос
/ 07 мая 2009

Я пытаюсь заменить все экземпляры строк, например

.
PageLocalize("Texts", "R73")

с чем-то вроде

Texts.R73.Localise()

У меня есть регулярное выражение для сопоставления этих строк:

PageLocalize\("([A-Za-z]+)", "([A-Za-z0-9]{0,6})"\)

И строка замены:

$1.$2.Localise()

но Тренер Regex говорит, что мой результат замены

$1.$2.Localise()

Что мне нужно сделать с моим регулярным выражением, чтобы заставить работать пронумерованные группировки?

Ответы [ 2 ]

2 голосов
/ 07 мая 2009

Я не использовал RegexCoach, но некоторые движки Regex требуют, чтобы вы указывали обратную ссылку с обратной косой чертой, например:

\1.\2.Localise()

Результат, который вы получаете, возможен только в том случае, если 1 доллар не распознан как обратная ссылка на группу 1.

Edit:

Я только что проверил, и RegexCoach , кажется, использует синтаксис Perl Regex. Если это так, то $1 будет действительной обратной ссылкой на группу 1. Тогда может показаться, что механизм не может сопоставить группы.

2 голосов
/ 07 мая 2009

Отлично работает в тестовом приложении:

var r = new Regex(
    "PageLocalize\\(\"([A-Za-z]+)\", \"([A-Za-z0-9]{0,6})\"\\)");
var s = r.Replace("PageLocalize(\"Texts\", \"R73\")", "$1.$2.Localise()");
Console.WriteLine(s);

В результате:

Texts.R73.Localise()

AmitK нашел правильный путь в Regex Coach, который использует \ 1 вместо $ 1. Оказывается, RegexCoach не является приложением .NET, поэтому он не использует регулярные выражения .NET!

В отдельном примечании, вы знаете о именованных группах ? Их легче поддерживать, особенно если вы добавляете новые группы в регулярные выражения. Не удается получить Stackoverflow для отображения регулярного выражения именованной группы без пробелов, поэтому здесь он с пробелами между ними:

(? <Имя_группы> yourregex)

А в тексте замены:

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