Исключить часть выбора регулярного выражения

#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