Как найти все повторяющиеся последовательности из трёх цифр, которые идут друг за другом?

Необходимо найти все повторяющиеся последовательности из трёх цифр, которые идут друг за другом. Пример 696696 878878 Вывести 696696 878878 Вход 534535345377777753453 Выход 777777 Мое регулярное выражение

import re
s=input()
res = re.findall(r'(?P<test>\d{3})(?P=test)', s)
print(res)

При вводе 696696 878878 выводит ['696', '878'], а надо 696696 878878 Как исправить?


Ответы (3 шт):

Автор решения: Zhihar

а такой вариант подойдет?

(\d{3})\1+

\d{3} - любые 3 цифры

(\d{3}) - группа из любых 3 цифр (группа нужна, чтобы потом ее в регулярке использовать)

\1+ - от одного и больше повторений найденной ранее группы

→ Ссылка
Автор решения: Василий Калеев
import re
s=input()
res = re.findall(r'(\d{3})(\1+)', s)
for i in res:
    print(*i,sep="", end=" ")
→ Ссылка
Автор решения: SergFSM

При вводе 696696 878878 выводит ['696', '878'], а надо 696696 878878 Как исправить?

ваша регулярка рабочая, если хотите обязательно использовать именованную группу, то просто возьмите вместо findall finditer, он возвращает объект match у которого много полезных атрибутов и методов:

from re import finditer

[m[0] for m in finditer(r'(?P<test>\d{3})(?P=test)', s)]
# ['696696', '878878']

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

→ Ссылка