2024-09-28 22:51:50 发布
网友
我有s = 'QMMQSM'。我想回去['QMM']。重叠匹配计数。为什么这样不行?你知道吗
s = 'QMMQSM'
['QMM']
re.findall('(?=(\w(\w)\2))',s)
如果我有两个字符X和Y,我需要匹配XYY,比如MOO或BOO。 奖励:我如何强迫X不等于Y?你知道吗
XYY
MOO
BOO
使用findall返回正则表达式匹配的文本。因为lookaheads不消耗任何东西,所以您的文本匹配,但匹配不包含文本。它只是向前看,看到正确的内容,并匹配(\w(\w)\2)前面的空字符串。你知道吗
findall
(\w(\w)\2)
如果使用search而不是findall,则可以将组取出,这样就可以得到匹配的对象:
search
>>> re.search(r'(?=(\w(\w)\2))',s).group(1) 'QMM'
(您也可以使用finditer,它为匹配对象提供迭代器,而不是匹配文本本身。)
finditer
print re.findall(r'(?=(\w(\w)\2))',s) ^^
你需要使用r。它是原始的方法。那个将删除escaping问题`。你知道吗
r
escaping
或者
print re.findall('(?=(\w(\w)\\2))',s) ^^
这将允许regex访问python将处理的\2。你知道吗
\2
re.findall(r"(?=((\w)(?!\2)(\w)\3))",s)
您可以使用它来强制X not equal to Y。请参阅演示。你知道吗
X not equal to Y
https://regex101.com/r/uF4oY4/11
使用
findall
返回正则表达式匹配的文本。因为lookaheads不消耗任何东西,所以您的文本匹配,但匹配不包含文本。它只是向前看,看到正确的内容,并匹配(\w(\w)\2)
前面的空字符串。你知道吗如果使用
search
而不是findall
,则可以将组取出,这样就可以得到匹配的对象:(您也可以使用
finditer
,它为匹配对象提供迭代器,而不是匹配文本本身。)你需要使用
r
。它是原始的方法。那个将删除escaping
问题`。你知道吗或者
这将允许regex访问python将处理的
\2
。你知道吗您可以使用它来强制
X not equal to Y
。请参阅演示。你知道吗https://regex101.com/r/uF4oY4/11
相关问题 更多 >
编程相关推荐