2017-04-04 68 views
1

的Python似乎在Python匹配的组时,有一个相当令人惊讶的行为:为什么Python中的正则表达式组没有按预期匹配?

>>> re.split("\+|-", "1+2") 
['1', '2'] 

>>> re.split("(\+|-)", "1+2") 
['1', '+', '2'] 

我还没有找到为什么分组一个表达式会防止它匹配任何令人满意的解释,所以这里有什么问题吗?

根据regex101,在匹配时绝对没有区别,但需要更多步骤。 regex test

+1

见http://stackoverflow.com/questions/2136556/in -python-怎么办-I-拆分一个字符串并保持的最分隔符。和['re.split' docs](https://docs.python.org/2/library/re.html#re.split):*如​​果在模式中使用捕获括号,则所有组中的文本模式也作为结果列表的一部分返回。* –

回答

2

当您添加()时,您要求Python在分割中“捕捉”该值。

一样,如果你是做:

>>> re.split("(a\+|-)", "1a+2") 
['1', 'a+', '2'] 

然后它会获取一个+,并把它放在中心。

发生了什么事它,它正在采取所有捕获的分组,并把它们相关的项目之间的阵中,就像这个例子:

>>> re.split("(a)(\+|-)", "1a+2") 
['1', 'a', '+', '2'] 
相关问题