re模块中组和组之间有什么区别?

时间:2012-02-19 09:01:43

标签: python regex

这是:

import re
>>>s = 'abc -j k -l m'
>>>m = re.search('-\w+ \w+', s)
>>>m.groups()
()
>>> m.group(0)
'-j k'

为什么groups()没有给我什么,但是group(0)会产生一些?有什么区别?

跟进

代码如下

>>>re.findall('(-\w+ \w+)', s)
['-j k', '-l m', '-n o']

findall可以获取所有-\w+ \w+子字符串,但请看一下:

>>>m = re.search('(-\w+ \w+)+', s)
>>>m.groups()
('-j k',)

为什么search不能给我所有的子串?

再次跟进

如果s = 'abc -j k -l m -k o

>>>m = re.search(r'(-\w+ \w+ )+', s)
>>>m.groups()
('-l m ',)      # why just one substring?
>>>m.group(0)
'-j k -l m '    # as I expected

3 个答案:

答案 0 :(得分:14)

groups()仅返回正则表达式中的任何显式捕获的组(在正则表达式中用(圆括号)表示),而group(0)返回匹配的整个子字符串无论你的表达式是否有任何捕获组,都可以使用正则表达式。

正则表达式中的第一个显式捕获由group(1)表示。

重新跟进编辑:

  

为什么search不能给我所有的子串?

search()只会针对输入字符串中的模式返回第一个匹配项。

答案 1 :(得分:2)

让我用一个小例子来解释

>>> var2 = "Welcome 44 72"
>>> match = re.search(r'Welcome (\d+) (\d+)',var2)
>>> match.groups()
('44', '72')
>>> match.groups(0)
('44', '72')
>>> match.groups(1)
('44', '72')
>>> match.group(0)
'Welcome 44 72'
>>> match.group(1)
'44'

说明:groups()是一个元组类型,它具有与正则表达式模式匹配的所有值。

groups(0)groups()groups(1) ....仅打印所有值

group()或group(0) - >它将给出整个字符串以及与正则表达式匹配的模式的值。

组(1)将给出第一个模式匹配值

组(2)将给出第二个模式匹配值....

答案 2 :(得分:1)

您的正则表达式没有匹配组,由parens((...))表示。