这是:
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
答案 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((...)
)表示。