Luis Ramon Ramirez Rodriguez Luis Ramon Ramirez Rodriguez - 4 months ago 18
Python Question

return string with first match Regex

I want to get the first match of a regex.

In this case, I got a list:

text = 'aa33bbb44'
re.findall('\d+',text)



['33', '44']


I could extract the first element of the list:

text = 'aa33bbb44'
re.findall('\d+',text)[0]



'33'


But that only works if there is at least one match, otherwise I'll get an error:

text = 'aazzzbbb'
re.findall('\d+',text)[0]



IndexError: list index out of range


In which case I could define a function:

def return_first_match(text):
try:
result = re.findall('\d+',text)[0]
except Exception, IndexError:
result = ''
return result


Is there a way of obtaining that result without defining a new function?

Answer

You could embed the '' default in your regex by adding |$:

>>> re.findall('\d+|$', 'aa33bbb44')[0]
'33'
>>> re.findall('\d+|$', 'aazzzbbb')[0]
''
>>> re.findall('\d+|$', '')[0]
''

Also works with re.search pointed out by others:

>>> re.search('\d+|$', 'aa33bbb44').group()
'33'
>>> re.search('\d+|$', 'aazzzbbb').group()
''
>>> re.search('\d+|$', '').group()
''
Comments