Here it is:
import re
>>>s = 'abc -j k -l m'
>>>m = re.search('-\w+ \w+', s)
>>>m.groups()
()
>>> m.group(0)
'-j k'
Why groups() gives me nothing, but group(0) yields some? What is the difference?
Follow Up
Code is as follows
>>>re.findall('(-\w+ \w+)', s)
['-j k', '-l m', '-n o']
findall can get me all the -\w+ \w+ substrings, but look at this:
>>>m = re.search('(-\w+ \w+)+', s)
>>>m.groups()
('-j k',)
Why can’t search give me all the substrings?
Follow Up Again
If s = 'abc -j k -l m -k o, and
>>>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
groups()only returns any explicitly-captured groups in your regex (denoted by(round brackets)in your regex), whereasgroup(0)returns the entire substring that’s matched by your regex regardless of whether your expression has any capture groups.The first explicit capture in your regex is indicated by
group(1)instead.Re follow-up edit:
search()will only return the first match against the pattern in your input string.