2
How????are!!!you

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

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

\?*|\!*

这是行不通的。但是,以下正则表达式有效:

\?+|\!+

有人向我解释这个吗?

4

1 回答 1

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

至于为什么\?*|\!*不起作用,看看re.findall发现了什么:

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

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

于 2013-01-28T07:48:59.040 回答