正则表达式:findall函数的结果不同

时间:2015-11-21 11:23:42

标签: python regex python-2.7

请解释以下行为。

matches=re.findall('([^\d]{3,})|(g8 )',input_string)
for m in matches:
    print type(m)

给出<type 'tuple'>

matches=re.findall('([^\d]{3,})',input_string)
for m in matches:
    print type(m)

给出<type 'unicode'>

1 个答案:

答案 0 :(得分:1)

由于第一个正则表达式中存在两个捕获组,re.findall应该返回一个元组列表,其中包含每个元素的两个元素。元组上的项目数基于捕获组(&gt; = 2)。

在第二种情况下,只有一个捕获组存在,因此它返回一个unicode字符串列表。

示例:

>>> import re
>>> s = 'fohgsdhgfo'
>>> re.findall(r'(f)|(o)', s)
[('f', ''), ('', 'o'), ('f', ''), ('', 'o')]
>>> re.findall(r'(f)', s)
['f', 'f']