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"

["33", "44"]

I could extract the first element of the list:

text = "aa33bbb44"


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

text = "aazzzbbb"

IndexError: list index out of range

In which case I could define a function:

def return_first_match(text):
        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 rating: 129

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

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

Also works with pointed out by others:

>>>"d+|$", "aa33bbb44").group()
>>>"d+|$", "aazzzbbb").group()
>>>"d+|$", "").group()

Answer rating: 57

If you only need the first match, then use instead of re.findall:

>>> m ="d+", "aa33bbb44")
>>> m ="d+", "aazzzbbb")
Traceback (most recent call last):
  File "<pyshell#281>", line 1, in <module>
AttributeError: "NoneType" object has no attribute "group"

Then you can use m as a checking condition as:

>>> m ="d+", "aa33bbb44")
>>> if m:
        print("First number found = {}".format(
        print("Not Found")

First number found = 33

Get Solution for free from DataCamp guru