我是一个蟒蛇初学者。我对re.split()的输出有疑问
text='alpha, beta,,,gamma dela'
In [9]: re.split('(,)+',text)
Out[9]: ['alpha', ',', ' beta', ',', 'gamma dela']
In [11]: re.split('(,+)',text)
Out[11]: ['alpha', ',', ' beta', ',,,', 'gamma dela']
In [7]: re.split('[,]+',text)
Out[7]: ['alpha', ' beta', 'gamma dela']
为什么这些输出有所不同? 请帮帮我,非常感谢你!
答案 0 :(得分:2)
正如re.split
的{{3}}中指定的那样:
<强>
re.split(pattern, string, maxsplit=0, flags=0)
强>按照模式的出现拆分字符串。如果捕获括号 用于模式,然后是模式中所有组的文本 也作为结果列表的一部分返回。如果是maxsplit 非零,最多发生maxsplit分裂,其余部分发生 string作为列表的最后一个元素返回。
捕获组通常使用不包含(..)
或前瞻/后瞻标记的括号(?:
)来描述。所以前两个正则表达式都有捕获组:
(,)+
# ^ ^
(,+)
# ^ ^
在第一种情况下,捕获组是单个逗号。这意味着使用了最后一次捕获(因此使用了一个逗号)。在第二种情况下((,+)
),它可以捕获多个逗号(并且正则表达式旨在尽可能地捕获,因此它捕获所有内容)。
在最后一种情况下,没有捕获组,因此这意味着完成拆分并且完全忽略与模式匹配的文本。