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

Alc*_*ott 8 python regex

这里是:

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

为什么不groups()给我什么,但group(0)产生一些?有什么不同?

跟进

代码如下

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

findall可以得到我所有的-\w+ \w+子串,但看看这个:

>>>m = re.search('(-\w+ \w+)+', s)
>>>m.groups()
('-j k',)
Run Code Online (Sandbox Code Playgroud)

为什么不能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
Run Code Online (Sandbox Code Playgroud)

Bol*_*ock 14

groups()只返回正则表达式中任何显式捕获的组(在正则表达式中用(圆括号表示)),而group(0)返回与正则表达式匹配的整个子字符串,无论表达式是否包含任何捕获组.

group(1)相反,表示正则表达式中的第一个显式捕获.

重新跟进编辑:

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

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


小智 8

让我用一个小例子来解释

>>> 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'
Run Code Online (Sandbox Code Playgroud)

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

groups(0)groups()groups(1).... 它只打印所有值

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

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

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