При использовании модуля re в python в результате, полученном с помощью совпадения \ S $, будет отсутствовать последний элемент в строке - PullRequest
0 голосов
/ 17 апреля 2019
pattern_s = '^((?=\S*?[A-Z])(?=\S*?[a-z])(?=\S*?\d).{6,})\S$'
c = 'ABab12'
b = re.findall(pattern_s, c)
print(b)   # []

d = 'ABCabc123'
e = re.findall(pattern_s, d)
print(e)   # ['ABCabc12']

но

pattern_t = '^((?=\S*?[A-Z])(?=\S*?[a-z])(?=\S*?\d).{6,})$'
c = 'ABab12'
b = re.findall(pattern_t, c)
print(b)   # ['ABab12']

Почему это происходит?Есть ли проблема с моим методом письма или другими факторами?

1 Ответ

0 голосов
/ 17 апреля 2019

\S в конце вашего регулярного выражения всегда должен соответствовать одному непробельному символу - последнему символу в вашей строке, поскольку за ним следует $. Поэтому, когда это возможно, ваша группа захвата будет соответствовать тому, что не включает этот последний символ.

Я настоятельно рекомендую избегать шаблонов прогнозирования ((?=...) и варианты) при любых обстоятельствах. Использование трех в одном и том же регулярном выражении, безусловно, не нужно. Если бы вы могли объяснить, что вы пытаетесь сделать, мы все можем дать вам рекомендации, как сделать это лучше.

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