我有Python代码是这样的:Python的正则表达式的结果大于原字符串
a = 'xyxy123'
b = re.findall('x*',a)
print b
这是结果:
['x', '', 'x', '', '', '', '', '']
为什么b
有八个元素时a
只有七个字符?
我有Python代码是这样的:Python的正则表达式的结果大于原字符串
a = 'xyxy123'
b = re.findall('x*',a)
print b
这是结果:
['x', '', 'x', '', '', '', '', '']
为什么b
有八个元素时a
只有七个字符?
有八个 “点” 的字符串中:
| X | Y | X | Y | 1 | 2 | 3 |
他们每个人都是一个正则表达式可以开始的位置。由于您的正则表达式包含空字符串(因为x*
允许x
的0个副本),所以每个点会生成一个匹配,并且该匹配会附加到b
的列表中。例外情况是开始较长比赛的两个位置,x
;在msalperen的答案,
空场比赛都包括在结果,除非他们碰另一场比赛的开始,
所以在第一和第三的位置空匹配不包括在内。
根据Python文档(https://docs.python.org/2/library/re.html):
re.findall返回所有非重叠模式的匹配字符串,作为 字符串列表。该字符串从左到右扫描,匹配结果 以找到的顺序返回。如果 中存在一个或多个组,则返回组的列表;这将是一个元组列表,如果 该模式有多个组。除非他们触及另一场比赛的开始,否则空的比赛包含在 结果中。
所以它返回所有匹配x *的结果,包括空白的。
我明白了,谢谢。 –