我对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;没有这样的组"。
那么,有人能用简单的语言向我解释正则表达式中分组的用法吗?
答案 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个对应于(.+)