当我写下面代码时:
m = re.findall('\sf.*?\s','a f fast and friendly dog');
我得到输出:[' f ', ' friendly ']
但是当我在f& f之间提供额外的空间时快,我得到了我从前一个预期的输出。 代码如下
m = re.findall('\sf.*?\s','a f fast and friendly dog');
输出
[' f ', ' fast ', ' friendly ']
有谁可以告诉我为什么我在第一种情况下没有得到以后的输出(没有在f& fast之间插入额外的空间)?
答案 0 :(得分:7)
因为您的模式以\s
结尾。 正则表达式匹配不重叠 ,因此第一个匹配' f '
与尾随空格匹配,使得字符串的其余部分以'fast'
开头,而不是' fast'
。 'fast'
与以\s
答案 1 :(得分:1)
匹配后' f '
占用的空间。现在,下一个搜索从'fast and friendly dog'
开始。但是现在fast
没有前导空格,因此不匹配。
如果你想要不占用空间,那么试试积极的后视搜索。