Что такое шаблон регулярного выражения для групп захваченных имен в .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;
Я не могу заставить шаблон регулярных выражений работать, но я думаю, что приведенное выше объясняет это достаточно хорошо. По сути, мне нужно получить имя человека, количество игр и т.д.
Может ли кто-нибудь решить эту проблему и объяснить фактический шаблон регулярных выражений, который они разработали?
Ответы
Ответ 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>...?)";
Ваше регулярное выражение не соответствует части даты строки.