Python 正则表达式匹配模式,而不是最小长度,而不是所需的最大长度

Python 正则表达式匹配模式,而不是最小长度,而不是所需的最大长度,python,regex,string,parsing,text,Python,Regex,String,Parsing,Text,下面的代码作为示例返回'ol',目标是返回单词'cool' import re re.search( r'.*([a-z]{2,}).*', 'this is very cool').group(1) 也就是说,正则表达式匹配“至少2个字符”,并且没有检查是否可以匹配更多字符。如何让正则表达式匹配可能的最大字符数而不是最小字符数 也就是说,如何实现'cool'的输出?获得ol的原因是模式中的初始*一次捕获整个字符串,然后发生回溯以适应后续子模式。当ol从抓取的文本中“释放”时,[a-z]{1,

下面的代码作为示例返回
'ol'
,目标是返回单词
'cool'

import re
re.search( r'.*([a-z]{2,}).*', 'this is very cool').group(1)
也就是说,正则表达式匹配“至少2个字符”,并且没有检查是否可以匹配更多字符。如何让正则表达式匹配可能的最大字符数而不是最小字符数


也就是说,如何实现
'cool'
的输出?

获得
ol
的原因是模式中的初始
*
一次捕获整个字符串,然后发生回溯以适应后续子模式。当
ol
从抓取的文本中“释放”时,
[a-z]{1,2}
匹配该子字符串,正则表达式引擎调用它一天并返回匹配项(后面的
*
在这里不重要)

您可以使用单词边界来确保
*
回溯到以2个小写字母开头的最后一个单词的开头,并且可能有更多:

.*\b([a-z]{2,})

:

您可以使用
r'\b(\w{2,})\s*$”
作为正则表达式
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