Подтвердить что ты не робот

Что такое шаблон регулярного выражения для групп захваченных имен в .NET?

Я борюсь с шаблоном регулярного выражения, который вытаскивает текст из строки в именованные группы.

A (несколько произвольный) пример лучше всего объяснит, чего я пытаюсь достичь.

string input =
    "Mary Anne has been to 949 bingo games. The last was on Tue 24/04/2012. She won with the Numbers: 4, 6, 11, 16, 19, 27, 45";

string pattern =
    @"(?<Person>\w+?) has been to (?<NumberOfGames>\d+?) bingo games. The last was on (?<Day>...?) (?<Date>...?). She won with the Numbers: (?<Numbers>...?)";

Regex regex = new Regex(pattern);
var match = regex.Match(input);

string person = match.Groups["Person"].Value;
string noOfGames = match.Groups["NumberOfGames"].Value;
string day = match.Groups["Day"].Value;
string date = match.Groups["Date"].Value;
string numbers = match.Groups["Numbers"].Value;

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

Может ли кто-нибудь решить эту проблему и объяснить фактический шаблон регулярных выражений, который они разработали?

4b9b3361

Ответ 1

 string pattern = @"(?<Person>[\w ]+) has been to (?<NumberOfGames>\d+) bingo games\. The last was on (?<Day>\w+) (?<Date>\d\d/\d\d/\d{4})\. She won with the Numbers: (?<Numbers>.*?)$";

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

Ответ 2

Посмотрите документацию для Result():

Возвращает расширение указанного шаблона замены.

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

Вы хотите получить доступ к группам совпадений, так что: a Groups свойство.

С этим ваш код будет выглядеть так:

string title = match.Groups["Person"].Value;
string drawNumber = match.Groups["NumberOfGames"].Value;

Кроме того, как правильно указано russau, ваш шаблон не соответствует вашему тексту: Date - это не просто три символа.

Ответ 3

Предполагая, что регулярное выражение работает, код для получения названной группы будет следующим:

string title = match.Groups["Person"].Value;
string drawNumber = match.Groups["NumberOfGames"].Value;

Ответ 4

Попробуйте следующее:

string pattern = @"(?<Person>\w+?) has been to (?<NumberOfGames>\d+?) bingo games. The last was on (?<Day>...?) (?<Date>\d+/\d+/\d+). She won with the Numbers: (?<Numbers>...?)";

Ваше регулярное выражение не соответствует части даты строки.