为什么我需要在正则表达式模式中有额外的空间才能使其正常工作?

时间:2017-09-07 07:39:38

标签: python regex

当我写下面代码时:

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之间插入额外的空间)?

2 个答案:

答案 0 :(得分:7)

因为您的模式以\s结尾。 正则表达式匹配不重叠 ,因此第一个匹配' f '与尾随空格匹配,使得字符串的其余部分以'fast'开头,而不是' fast''fast'与以\s

开头的模式不匹配

答案 1 :(得分:1)

匹配后' f '占用的空间。现在,下一个搜索从'fast and friendly dog'开始。但是现在fast没有前导空格,因此不匹配。

如果你想要不占用空间,那么试试积极的后视搜索。