Может поиск (r '(ab) +', "ababababab") сопоставить все символы в питоне - PullRequest
0 голосов
/ 25 августа 2010

Я обнаружил, что findall(r'(ab)+', "ababababab") может соответствовать только ["ab"]

>>> re.findall(r'(ab)+', "ababababab")
['ab']

я просто знаю, что использование r'(?:ab)+' может соответствовать всем символам

>>> re.findall(r'(?:ab)+', "ababababab")
['ababababab']

Почему это происходит?


Извините, я не могу четко ответить на мой вопрос

(?: ab) принимает 'ab' в целом, давайте сделаем c = ab, поэтому c + = ababab ....

так что это явно

>>> re.findall(r'(?:ab)+', "ababababab") <br>
['ababababab'] 

Мой вопрос таков: почему это происходит:

>>> match=re.search(r'(ab)+', "ababababab") <br>
>>> match.group()<br>
'ababababab'

Ответы [ 2 ]

6 голосов
/ 25 августа 2010

Я думаю, что вопрос, который вы задаете здесь, почему он возвращает это:

>>> re.findall(r'(ab)+', "ababababab")
['ab']

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

Я думаю, что вы хотите, это либо:версия, которую вы разместили:

>>> re.findall(r'(?:ab)+', "ababababab")
['ababababab']
1 голос
/ 25 августа 2010

Если шаблон содержит группу, findall возвращает группу, а не все совпадение.Здесь (ab) + соответствует всей строке, но возвращается только группа (ab).

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