Регулярное выражение, чтобы не соответствовать выражениям, содержащим специфицированное c число - PullRequest
1 голос
/ 05 мая 2020

Я хочу сопоставить такое регулярное выражение

] prima 1 words 2 words

А не, если оно

] prima 1 words 2 words 3 words

Моя пробная версия:

\]\s*prima\s*1([\w\s]+)\s2([\w\s][^3]+)

Но это совпадает только с частью выражения, которому я не хочу соответствовать. Мое исключение неверно. Как это сделать? Мне нужно вставить его в re.compile, так что это должна быть одна строка.

1 Ответ

1 голос
/ 05 мая 2020

Этот шаблон будет соответствовать данным примера, но учтите, что \w сам по себе также может соответствовать di git.

Если вы хотите сопоставить 1 или несколько символов пробела (которые также могут соответствовать символам новой строки), вы можете использовать \s+ вместо пробела.

^\] prima 1 \w+ 2 \w+$

Regex demo

Если вы хотите сопоставить ] prima, за которым следуют 1 и 2, за которыми сами по себе могут следовать 1 или несколько слов, которые не могут начинаться с di git:

^] prima 1 [^\W\d]\w*(?: [^\W\d]\w*)* 2 [^\W\d]\w*(?: [^\W\d]\w*)*$
  • ^ Начало строки
  • ] prima 1 Буквальное соответствие
  • [^\W\d]\w* Соответствие слову char не начинается с di git
  • (?: [^\W\d]\w*)* Повторить 0+ раз, сопоставляя пробел и слово, которое не начинается с di git
  • 2 Буквально
  • [^\W\d]\w* Соответствие слову char не начать с di git
  • (?: [^\W\d]\w*)* Повторить 0+ раз, сопоставив пробел и слово, которое не начинается с di git
  • $ Конец строки

Regex demo

Если следующие слова не могут состоять только из цифр, вы можете использовать отрицательный просмотр вперед (?!\d+\b) проверка только цифр * 1 047 *

^\] prima 1 (?!\d+\b)\w+(?: (?!\d+\b)\w+)* 2 (?!\d+\b)\w+(?: (?!\d+\b)\w+)*$

Демонстрация Regex

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...