Как найти все повторяющиеся последовательности из трёх цифр, которые идут друг за другом?
Необходимо найти все повторяющиеся последовательности из трёх цифр, которые идут друг за другом.
Пример 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 шт):
а такой вариант подойдет?
(\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=" ")
При вводе 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']
либо, как уже было сказано, используйте обычные группы для захвата, а не именованные, но тогда надо джойнить группы