Re.match() returns always none

I feel kind of stupid but it does not work:

import re

a = " ebrj wjrbw erjwek wekjb rjERJK ABB RAEJKE BWE RWEJBEWJ B KREWBJ BWERBJ32J3B23B J BJ235JK BJJ523 2"

print re.match(ur'/(wekjb|ABB)/',a)
if re.match(ur'/(wekjb|ABB)/',a):
    print 'success'

I have the ur' if the user given a is unicode. I want to print success if wekjb or ABB is in the string but I always get None as the result of the match.


Solution 1:

re.match is implicitly anchored to the start of the string. If you want to search a string for a substring that can be anywhere within it, then you need to use re.search:

import re

a = " ebrj wjrbw erjwek wekjb rjERJK ABB RAEJKE BWE RWEJBEWJ B KREWBJ BWERBJ32J3B23B J BJ235JK BJJ523 2"

print re.search(ur'(wekjb|ABB)',a).group()
if re.search(ur'(wekjb|ABB)',a):
    print 'success'

Output:

wekjb
success

Also, Python Regexes do not need to have a / at the start and end.

Lastly, I added .group() to the end of the print line because I think this is what you want. Otherwise, you'd get something like <_sre.SRE_Match object at 0x01812220>, which isn't too useful.