#regex
Вопрос:
Я пытаюсь поймать некоторые «блоки» моего текстового файла, которые заканчиваются шаблоном с несколькими символами»=».
Я хочу поймать все эти блоки без окончательного шаблона, но он сделан с помощью»=», который используется в некоторой группе захвата моего блока … Поэтому, когда я выбираю их, шаблон всегда находится в последнем совпадении …
У вас нет способа исключить это ?
Выдержка из моего регулярного выражения :
(d{2}-d{2}-d{4} d{2}:d{2}) (.*)(Statut)([,:. aA-zZ0-9À-ÖØ-öø-ÿ=><nr]*)n
И блок для анализа :
01-10-2021 16:02 utilisateur1Statut A réaliser =>
Ouverte
01-10-2021 16:03 utilisateur1Statut MyFile.txt
01-10-2021 16:04 utilisateur1Statut
utilisateur1 => utilisateur2
======================================================================
Предупреждение : мой блок может содержать одну или несколько строк с возвратом каретки …
Ссылки на образец regex101 : https://regex101.com/r/hXu3QO/1
Ответ №1:
Последняя часть шаблона содержит класс символов [,:. aA-zZ0-9À-ÖØ-öø-ÿ=><nr]
, который также совпадает =
, и новые строки, поэтому нет правила, запрещающего совпадение.
Обратите внимание, что aA-zZ
это не то же самое, что [a-zA-Z]
Вы можете исключить новые строки из класса символов и повторить сопоставление, начиная с новой строки, и всех строк, которые не начинаются, например ===
, или d{2}-
Конечно, вы можете сделать правило настолько конкретным, насколько захотите.
(d{2}-d{2}-d{4} d{2}:d{2}) (.*?)(Statut)s*([,:. a-zA-Z0-9À-ÖØ-öø-ÿ=><]*(?:n(?!===|d{2}-)[,:. a-zA-Z0-9À-ÖØ-öø-ÿ=><] )*)
Комментарии:
1. Thks много, в чем разница между aA-zZ и [a-zA-Z] (я нашел в Google разницу между [a-zA-Z] и [a-Z], но не эту особенность ?
2. @Broshet Смотрите объяснение на
A-z matches a single character in the range between A (index 65) and z (index 122) (case sensitive) Z matches the character Z with index 9010 (5A16 or 1328) literally (case sensitive)
см. regex101.com/r/sAF8Nd/1 и таблица ascii asciitable.com