regex – Python extract pattern matches

regex – Python extract pattern matches

You need to capture from regex. search for the pattern, if found, retrieve the string using group(index). Assuming valid checks are performed:

>>> p = re.compile(name (.*) is valid)
>>> result = p.search(s)
>>> result
<_sre.SRE_Match object at 0x10555e738>
>>> result.group(1)     # group(1) will return the 1st capture (stuff within the brackets).
                        # group(0) will returned the entire matched text.
my_user_name

You can use matching groups:

p = re.compile(name (.*) is valid)

e.g.

>>> import re
>>> p = re.compile(name (.*) is valid)
>>> s = 
... someline abc
... someother line
... name my_user_name is valid
... some more lines
>>> p.findall(s)
[my_user_name]

Here I use re.findall rather than re.search to get all instances of my_user_name. Using re.search, youd need to get the data from the group on the match object:

>>> p.search(s)   #gives a match object or None if no match is found
<_sre.SRE_Match object at 0xf5c60>
>>> p.search(s).group() #entire string that matched
name my_user_name is valid
>>> p.search(s).group(1) #first group that match in the string that matched
my_user_name

As mentioned in the comments, you might want to make your regex non-greedy:

p = re.compile(name (.*?) is valid)

to only pick up the stuff between name and the next is valid (rather than allowing your regex to pick up other is valid in your group.

regex – Python extract pattern matches

You could use something like this:

import re
s = #that big string
# the parenthesis create a group with what was matched
# and w matches only alphanumeric charactes
p = re.compile(name +(w+) +is valid, re.flags)
# use search(), so the match doesnt have to happen 
# at the beginning of big string
m = p.search(s)
# search() returns a Match object with information about what was matched
if m:
    name = m.group(1)
else:
    raise Exception(name not found)

Leave a Reply

Your email address will not be published. Required fields are marked *