Страницы

Поиск по вопросам

вторник, 31 марта 2020 г.

Любое количество любых символов

#c_sharp #регулярные_выражения


Как, используя регулярные выражения задать паттерн вида :

Начало ... конец , 

где ... это любые символы включая пробелы, тире подчеркивания и целые числа причем
сколько их неизвестно. Я пытаюсь сделать это так :

var pattern = new Regex(@"Start:\S*\s*End");


т.к. \S* - ноль или более символов не яв-ся пробелом а 
\s* - ноль или более символов являющихся. Однако это неправильно. Как исправить ?
    


Ответы

Ответ 1



Используйте 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.

Комментариев нет:

Отправить комментарий