python re.split()可疑结果

时间:2017-02-15 14:54:32

标签: python

我是一个蟒蛇初学者。我对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']

为什么这些输出有所不同? 请帮帮我,非常感谢你!

1 个答案:

答案 0 :(得分:2)

正如re.split的{​​{3}}中指定的那样:

  

<强> re.split(pattern, string, maxsplit=0, flags=0)

     

按照模式的出现拆分字符串。如果捕获括号   用于模式,然后是模式中所有组的文本   也作为结果列表的一部分返回。如果是maxsplit   非零,最多发生maxsplit分裂,其余部分发生   string作为列表的最后一个元素返回。

捕获组通常使用不包含(..)或前瞻/后瞻标记的括号(?:)来描述。所以前两个正则表达式都有捕获组:

  (,)+
# ^ ^
  (,+)
# ^  ^

在第一种情况下,捕获组是单个逗号。这意味着使用了最后一次捕获(因此使用了一个逗号)。在第二种情况下((,+)),它可以捕获多个逗号(并且正则表达式旨在尽可能地捕获,因此它捕获所有内容)。

在最后一种情况下,没有捕获组,因此这意味着完成拆分并且完全忽略与模式匹配的文本。