正则表达式分组

时间:2016-04-10 16:23:10

标签: python regex regex-group

我对python中的分组感到困惑。例如:

import re

m = re.search('From:\s+(.+)\s+To:\s+(.*)\s*', 'From: Toronto To: Beijing')
print m.group(0)
print m.group(1)
print m.group(2)

运行此程序后,我可以得到3个结果,但我不知道为什么会得到这样的结果:

From: Toronto To: Beijing
Toronto
Beijing 

此外,有时当我使用匹配对象的group方法时,我会收到一条警告说#34;没有这样的组"。

那么,有人能用简单的语言向我解释正则表达式中分组的用法吗?

2 个答案:

答案 0 :(得分:1)

在正则表达式中使用括号时,表示组。你这样做了两次,这些组的名字从1开始,从正则表达式中从左到右阅读。

组0是整场比赛的特殊组。

要使群组不匹配,请使用(?:something)。 演示:

>>> s = '12 34 56'
>>> m = re.search('(\d+)\s+(?:\d+)\s+(\d+)', s)
>>> m.group(0) # everything
'12 34 56'
>>> m.group(1) # content of first matching group
'12'
>>> m.group(2) # content of second matching group
'56'

m.groups()将按顺序为您提供所有匹配组的内容:

>>> m.groups()
('12', '56')

答案 1 :(得分:1)

正如您可能知道的那样,在正则表达式中使用括号会创建一个捕获组(除非您告诉它不要这样做,在这种情况下它将是一个非捕获组)。因此,在您呈现的正则表达式中,您有第0个组,它始终是它捕获的完整字符串,第1个组,对应于UITableViewCellStyleDefault,第2个对应于(.+)