Регулярное выражение, которое не заканчивается в меньшем регистре - PullRequest
0 голосов
/ 10 ноября 2019

создание регулярного выражения, которое имеет не менее 3 символов и не заканчивается на

import re
re.findall(r'(\w{3,})(?![a-z])\b','I am tyinG a mixed charAv case VOW')

My Out

['tyinG', 'mixed', 'charAv', 'case', 'VOW']

Мой ожидаемый -

['tyinG', 'VOW']

Iя получаю правильное, когда я делаю re.findall(r'(\w{3,})(?<![a-z])\b','I am tyinG a mixed charAv case VOW')

, когда я сделал je.im мой первый регулярное выражение, который не имеет <, дающий правильное

enter image description here

Какое значение имеет < здесь

1 Ответ

2 голосов
/ 10 ноября 2019

Первый шаблон (\w{3,})(?![a-z])\b не дает ожидаемого результата, потому что шаблон сначала соответствует 3+ символам слова, а затем утверждает с отрицательным прогнозом (?!, что то, что находится непосредственно справа, не является строчным символом az.

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


Второй шаблон (\w{3,})(?<![a-z])\b дает правильный результат при первой попытке сопоставления3 или более слова, и после этого утверждается с использованием отрицательного взгляда за (?<!, то, что непосредственно слева, не является строчным символом az.


Если вы хотите использовать обходной взгляд, вы можете сделатьшаблон немного более эффективен, используя границу слова в начале.

В конце шаблона поместите отрицательный взгляд за границей слова, чтобы сначала закрепить его, а затем выполнить утверждение.

\b\w{3,}\b(?<![a-z])

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

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