这里是:
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) 将给出第二个模式匹配值....