Python正则表达式:由重复的标点符号拆分

时间:2013-01-28 07:39:07

标签: python regex

How????are!!!you

我想将字符串拆分为['How','are','you']

我尝试过以下正则表达式:

\?*|\!*

哪个不起作用。但是,以下正则表达式有效:

\?+|\!+

有人向我解释这个吗?

1 个答案:

答案 0 :(得分:5)

>>> re.split(r'[?!]*', 'How????are!!!you')
['How', 'are', 'you']

至于为什么\?*|\!*不起作用,只需查看re.findall找到的内容:

>>> re.findall(r'\?*|\!*', 'How????are!!!you')
['', '', '', '????', '', '', '', '', '', '', '', '', '', '']

如果可能,交替总是占用第一个分支。 re.split尝试仅按非空匹配进行拆分,因此您最终会按?而不是!进行拆分(因为\?*将匹配任何空字符串,\!*将永远不会以不重叠的方式匹配。)