Python Regex结果比原始字符串长

时间:2017-08-08 06:33:38

标签: python regex

我有这样的python代码:

a = 'xyxy123'
b = re.findall('x*',a)
print b

结果如下:

['x', '', 'x', '', '', '', '', '']  

b只有七个字符时,a如何有八个元素?

2 个答案:

答案 0 :(得分:1)

字符串中有八个“斑点”:

| X | Y | X | Y | 1 | 2 | 3 |

每个都是正则表达式可以开始的位置。由于您的正则表达式包含空字符串(因为x*允许x的0个副本),因此每个点生成一个匹配项,并且该匹配项将附加到b中的列表中。例外是开始较长匹配的两个点,x;就像在msalperen的回答中一样,

  

结果中包含空匹配,除非它们触及另一场比赛的开头,

因此不包括第一和第三位置的空匹配。

答案 1 :(得分:0)

根据python文档(https://docs.python.org/2/library/re.html):

  

re.findall返回string中所有非重叠的模式匹配,   作为字符串列表。字符串从左向右扫描,并匹配   按找到的顺序返回。如果有一个或多个组   模式,返回组列表;这将是一个元组列表if   该模式有多个组。空匹配包含在   结果,除非他们触及另一场比赛的开始。

因此它返回与x *匹配的所有结果,包括空的结果。