Что не так с моим шаблоном регулярных выражений, чтобы найти повторяющиеся циклы в Python? - PullRequest
3 голосов
/ 27 декабря 2011

Я хочу сопоставить любую строку с повторяющимся циклом. Как в этих данных:

3333333333333333333333333333333333333333 / 1 digit cycle(3)
1666666666666666666666666666666666666666 / 1 digit cycle(6)
1428571428571428571428571428571428571428 / 6 digit cycle(142857)
1111111111111111111111111111111111111111 / 1 digit cycle(1)
0909090909090909090909090909090909090909 / 2 digit cycle(09)
0834522467546323545411673445234655345222 / no cycle
0769230769230769230769230769230769230769 / 6 digit cycle(769230)
0714285714285714285714285714285714285714 / 6 digit cycle(714285)
0666666666666666666666666666666666666666 / 1 digit cycle(6)

Шаблон, который я пробовал, - "([0-9]+?)\1+", который хорошо работает на других языках (таких как VB или текстовые редакторы). Я сохранил эти строки в списке с именем values. Итак, вот мой код:

import re

#stuff to get values
pattern = re.compile("([0-9]+?)\1+")
for value in values:
    matchObj = pattern.search(value)
    print(matchObj) #-> None
    matchObj = pattern.findall(value)
    print(matchObj) #-> []

Что я делаю не так? Любая подсказка приветствуется.

1 Ответ

5 голосов
/ 27 декабря 2011

Добавить префикс r:

r"([0-9]+?)\1+"

Это сделает обратную косую черту буквальной, вместо экранирования 1.

...