Шаблон для обнаружения повторяющихся символов не работает - Regex - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь выполнить sh то, что, на мой взгляд, было бы относительно просто - обнаружить повторяющиеся символы в выражении regex. Я ищу \d персонажей класса специально. Учитывая следующее:

string = '122345'

Я читал во многих постах , что этот шаблон:

rep_char = re.compile('(\d)\1*')

Выполнил бы sh задачу обнаружения 1(22)345 (повторяя 2) внутри строки.

Это не так.

Это даже работает в regexr.com, мой go для тестирования примеров регулярных выражений. Но почему-то модуль pythons re не следует этому примеру. Я пробовал несколько перестановок, таких как:

(\d)*\1
(\d)+\1
((\d)\1)*

Без кубиков. Если у кого-то есть решение, это поможет.

Ответы [ 2 ]

0 голосов
/ 01 апреля 2020

Вы правы, шаблон '(\d)\1*' не работает для того, что вы хотите. Как и другие комментаторы, пытались сказать вам, что шаблон r'(\d)\1' работает.

Вы замечаете разницу?

Использование * в регулярном выражении означает повторение нуля или любого количества раз предшествующего символа. Таким образом, в вашем случае вы, в простом английском Engli sh, соответствовали символу di git, за которым может следовать тот же самый di git.

Вы также должны использовать необработанную строку при описании шаблона , Вы можете прочитать, почему во втором и третьем абзаце re module documentation

PS: Не принимайте мой ответ. Другие комментаторы были там первыми.

0 голосов
/ 01 апреля 2020

Возможно, вы просто не используете правильный API. Следующее работает:

string = "122345"
if (re.search(r'(\d)\1', string)):
    print("MATCH")

Шаблон регулярного выражения (\d)\1 говорит, что соответствует любой строке, содержащей один ди git, за которым сразу же следует тот же ди git в любом месте строки.

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