以下代码作为示例返回'ol'
,目标是返回单词'cool'
import re
re.search( r'.*([a-z]{2,}).*', 'this is very cool').group(1)
也就是说,正则表达式匹配"至少2个字符"并没有检查是否可以匹配更多。如何让正则表达式匹配最大可能的字符数而不是最小值?
也就是说,如何实现'cool'
的输出?
答案 0 :(得分:1)
你得到ol
的原因是你的模式中的初始.*
一次抓取整个字符串,然后发生回溯以适应后续的子模式。当ol
被释放时,"从抓取的文本中,[a-z]{1,2}
匹配子字符串,正则表达式引擎每天调用它并返回匹配(尾随.*
在这里不重要。)
您可以使用单词边界来确保.*
回溯到以2个小写字母开头的最后一个单词的开头,并且可能有更多:
.*\b([a-z]{2,})
请参阅regex demo
import re
rx = r".*\b([a-z]{2,})"
s = "this is very cool"
m = re.search(rx, s)
if m:
print(m.group(1))
# => cool