我需要理解为什么正则表达式在指定不匹配时会贪婪地匹配
给定string='.GATA..GATA..ETS..ETS.'
返回GATA…ETS的最短子串
我使用regex模式pattern = r'(GATA).*?(ETS)'
syntax_finder=re.compile(pattern,re.IGNORECASE)
for match in syntax_finder.finditer(string):
print(match)
返回<re.Match object; span=(1, 17), match='GATA..GATA..ETS'>
但是,我希望它返回'GATA..ETS'
有人知道为什么会这样吗
我不是在寻找这个精确匹配问题的解决方案。我将用更复杂的GATA和ETS模式进行大量此类搜索,但我始终希望它返回最短的匹配
谢谢
正则表达式与非贪婪匹配。它找到第一个
GATA
,然后,因为使用的是.*?
,而不是.*
,匹配到之后的第一个ETS
。碰巧还有另一个GATA
,你不想要,但非贪婪匹配不关心那么正则表达式很可能没有足够的能力胜任这项工作。我的建议是使用它们将字符串拆分为GATA、ETS和中间部分(标记化),然后使用其他技术找到该序列中的模式(解析)
但我无法抗拒:)
这里我们使用一个否定的lookback断言:当扫描
GATA
和ETS
之间的部分时,我们只允许A
如果它前面没有GAT
相关问题 更多 >
编程相关推荐