组内反向引用

2024-09-28 22:51:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有s = 'QMMQSM'。我想回去['QMM']重叠匹配计数。为什么这样不行?你知道吗

re.findall('(?=(\w(\w)\2))',s)

如果我有两个字符X和Y,我需要匹配XYY,比如MOOBOO。 奖励:我如何强迫X不等于Y?你知道吗


Tags: re字符计数boomoofindallxyyqmmqsm
2条回答

使用findall返回正则表达式匹配的文本。因为lookaheads不消耗任何东西,所以您的文本匹配,但匹配不包含文本。它只是向前看,看到正确的内容,并匹配(\w(\w)\2)前面的空字符串。你知道吗

如果使用search而不是findall,则可以将组取出,这样就可以得到匹配的对象:

>>> re.search(r'(?=(\w(\w)\2))',s).group(1)
'QMM'

(您也可以使用finditer,它为匹配对象提供迭代器,而不是匹配文本本身。)

print re.findall(r'(?=(\w(\w)\2))',s)

                ^^   

你需要使用r。它是原始的方法。那个将删除escaping问题`。你知道吗

或者

print re.findall('(?=(\w(\w)\\2))',s)

                             ^^

这将允许regex访问python将处理的\2。你知道吗

 re.findall(r"(?=((\w)(?!\2)(\w)\3))",s)

您可以使用它来强制X not equal to Y。请参阅演示。你知道吗

https://regex101.com/r/uF4oY4/11

相关问题 更多 >