pythonregexstringindex-error

Return string with first match for a regex, handling case where there is no match


I want to get the first match of a regex.

In the following case, I have 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 IndexError:

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?


Solution

  • 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()
    ''