Python – Difference Between re.search() and re.findall()

pythonregex

The following code is very strange:

 >>> words = "4324324 blahblah"
 >>> print re.findall(r'(\s)\w+', words)
 [' ']
 >>> print re.search(r'(\s)\w+', words).group()
 blahblah

The () operator seems to behave poorly with findall. Why is this? I need it for a csv file.

Edit for clarity: I want to display blahblah using findall.

I discovered that re.findall(r'\s(\w+)', words) does what I want, but have no idea why findall treats groups in this way.

Best Answer

One character off:

>>> print re.search(r'(\s)\w+', words).groups()
(' ',)
>>> print re.search(r'(\s)\w+', words).group(1)
' '

findall returns a list of all groups captured. You're getting a space back because that's what you capture. Stop capturing, and it works fine:

>>> print re.findall(r'\s\w+', words)
[' blahblah']

Use the csv module

Related Question