Как, используя регулярные выражения задать паттерн вида :
Начало ... конец ,
где ... это любые символы включая пробелы, тире подчеркивания и целые числа причем сколько их неизвестно. Я пытаюсь сделать это так :
var pattern = new Regex(@"Start:\S*\s*End");
т.к. \S* - ноль или более символов не яв-ся пробелом а
\s* - ноль или более символов являющихся. Однако это неправильно. Как исправить ?
Ответ
Используйте
var pattern = new Regex(@"Start:.*?End", RegexOptions.Singleline);
Подробности
Start: - начальный разделитель
.*? - 0 и более любых символов, как можно меньше (*? — ленивый квантификатор)
End - конечный разделитель
RegexOptions.Singleline - флаг, благодаря которому находит все символы, даже символы перевода строки.
Сининимические конструкции:
var pattern = new Regex(@"(?s)Start:.*?End");
var pattern = new Regex(@"Start:(?s:.*?)End");
Однако, если необходимо найти подстроку, в которой не должно быть разделителей, нужно использовать "умеренно жадный токен"
(tempered greedy token):
var pattern = new Regex(@"(?s)Start:(?:(?!Start:).)*?End");
^^^^^^^^^^^^^^^^
Этот шаблон в строке Start: 1, Start: 2, End: 56 найдет Start: 2, End, а не Start: 1, Start: 2, End
Комментариев нет:
Отправить комментарий