what's the difference between `groups` and `group` in Python's `re` module
Question: 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
    


Answer: `groups()` only returns any explicitly-captured groups in your regex (denoted
by `(` round brackets `)` in your regex), whereas `group(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:

> Why can't `search` give me all the substrings?

`search()` will only return the first match against the pattern in your input
string.

