Именованные группы с регулярным выражением: хорошо или плохо? - PullRequest
8 голосов
/ 23 января 2010

Как создать группы с именами в C # с помощью регулярных выражений, и это хорошая практика?

Заранее спасибо.

Ответы [ 3 ]

7 голосов
/ 23 января 2010

Дайте группе имя тега:

(?<TagName>.*)

Я абсолютно считаю, что это хорошая практика. Подумайте, что происходит, когда вы меняете регулярное выражение. Если вы используете индексы для извлечения данных, порядок этих групп может измениться. Называя их, вы указываете именно те данные, которые, по вашему мнению, содержит группа, поэтому это тоже форма самодокументирования.

2 голосов
/ 23 января 2010

Как уже отмечали другие, синтаксис: (?<GroupName>....).

Вот пример, демонстрирующий, как создать группу с именем Key и группу с именем Value и, что не менее важно (но часто забывают), - как извлечь группы по имени из полученного объекта соответствия:

string s = "foo=bar/baz=qux";
Regex regex = new Regex(@"(?<Key>\w+)=(?<Value>\w+)");
foreach (Match match in regex.Matches(s))
{
    Console.WriteLine("Key = {0}, Value = {1}",
        match.Groups["Key"].Value,
        match.Groups["Value"].Value);
}

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

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

1 голос
/ 23 января 2010

именованные группы захвата хороши, обычно с более простыми регулярными выражениями использование числовой группы захвата, вероятно, более рационально, некоторые советы здесь:

http://www.regular -expressions.info / named.html

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