这个问题来自于《用Python自动化》一书。
有人能帮我理解为什么会有差异吗?谢谢!
atRegex1 = re.compile(r'\w{1,2}at')
atRegex2 = re.compile(r'\w{1,2}?at')
atRegex1.findall('The cat in the hat sat on the flat mat.')
atRegex2.findall('The cat in the hat sat on the flat mat.')
我认为问号?应该进行非贪婪匹配,所以\w{1,2}?只返回一个字符。但是对于这两个函数,我得到了相同的输出:
['cat', 'hat', 'sat', 'flat', 'mat']
在这本书中,
nongreedyHaRegex = re.compile(r'(Ha){3,5}?')
mo2 = nongreedyHaRegex.search('HaHaHaHaHa')
mo2.group()
'HaHaHa'
有人能帮我理解为什么会有差异吗?谢谢!
\b\wat\b
或更精确的\b[^\W\d_]at\b
模式,如果你只想匹配三个字母的完整单词。请记住,正则表达式中懒惰量化模式的最后一部分总是尽可能少地匹配符号。所以as*?
只会匹配a
,而as{1,200}?
总是匹配as
。 - Wiktor Stribiżew