2015-11-12 8 views
0

Предположим, что у нас есть строка, такая как 'w q a a a a a e d a a'. Я хотел бы найти самую длинную последовательность 'a' длиной не менее 2, которая равна 'a a a a a' в приведенном выше примере. Я пробовал следующее:Поиск самой длинной последовательной последовательности символа

re.findall(r'(a a a*)', text) 

но он дает только кратчайшее совпадение. Затем я попробовал:

re.findall(r'([^a] a a a* [^a])', text) 

но результаты для приведенной выше строки примера пустые. Как я могу это сделать?

+2

вы имеете в виду, как '(: а) {2} '(" * 'a ', за которым следует пробел, как минимум в два раза, но столько раз, сколько возможно" *)? См. https://regex101.com/r/rL3lY4/1 – jonrsharpe

+0

Oooh man, спасибо. Это то, что я хочу :) – Alex

ответ

0

Это потому, что у вас есть пространство между вами a знак. Вы можете использовать класс символов, которые соответствуют любому сочетанию a и пространство с длиной 5 или более:

>>> re.findall(r'([a ]{5,})', text) 
[' a a a a a '] 

Также обратите внимание, что вам не нужен захват группа вокруг всех ваши регулярных выражений, в этом случае вы можете использовать ни захвата группы с a и пространства (отказаться от согласования короткий образец) и так как вы просто хотите один матч вы можете использовать re.search():

>>> M = re.search(r'(?:a){2,}', text) 
>>> 
>>> M.group(0) 
'a a a a a ' 
Смежные вопросы