[使用python正则表达式,我试图匹配p
的数量与模式中最先匹配的数字一样多。
样本输入
1pp
2p
3ppp
4ppppppppp
预期输出
1p
None
3ppp
4pppp
已尝试代码我尝试了以下代码,在这里我使用命名组,并为匹配的数字指定名称“ dig”,现在我想在重复dig
中使用{m}
。但是以下代码在pattern
中找不到任何匹配项。
pattern = "2pppp"
reTriple = '((?P<dig>\d)p{(?P=dig)})'
regex = re.compile(reTriple,re.IGNORECASE)
matches = re.finditer(regex,pattern)
[我认为问题在于重复{m}
期望为整数m
,其中dig
为字符串。但是我找不到一种方法来将一个int连接到字符串,同时保持它为int!我尝试了如下铸造:
reTrip = '((?P<dig>\d)p{%d}'%int('(?P=dig)')+')'
但出现以下错误:
ValueError: invalid literal for int() with base 10: '(?P=dig)'
我感到被困。有人可以指导。
类似的东西呢:
import re
def val_txt(txt):
i = re.findall(r'\d+', txt)
return re.findall(fr'\d+p{{{i}}}', txt)
print(val_txt('2p'))