Используя python regex, я пытаюсь сопоставить столько чисел, сколько p
, чем число di git, впервые сопоставленное с шаблоном.
Пример ввода
1pp
2p
3ppp
4ppppppppp
Ожидаемый результат
1p
None
3ppp
4pppp
Код проб Я попробовал следующий код, где я использую именованную группу и даю имя 'dig' для совпавшего di git, теперь я хочу использовать dig
в повторении {m}
. Но следующий код не находит соответствия в pattern
.
pattern = "2pppp"
reTriple = '((?P<dig>\d)p{(?P=dig)})'
regex = re.compile(reTriple,re.IGNORECASE)
matches = re.finditer(regex,pattern)
Я думаю, проблема в том, что повтор {m}
ожидает int m
, где dig
- строка. Но я не могу найти способ объединить int в строку, сохраняя его int! Я пробовал кастовать следующим образом:
reTrip = '((?P<dig>\d)p{%d}'%int('(?P=dig)')+')'
Но я получаю следующую ошибку:
ValueError: invalid literal for int() with base 10: '(?P=dig)'
Я застрял. Может кто-нибудь, пожалуйста, руководство.
И это странно, что если я вместо этого сломаю reTriple следующим образом: сначала сохраните совпавший di git в переменной, а затем объедините эту переменную в reTriple, это сработает, и ожидаемый результат будет достигнуты. Но это обходной путь, и я ищу лучший метод.
reTriple = '(?P<dig>\d)'
dig = re.search(reTriple , pattern).group('dig')
reTriple = reTriple + '(p{1,' + dig + '})'