user3112948
user3112948

Reputation:

Python re.match doesnt match the same regexp

I'm facing a weird problem; I hope nobody asked this question before I need to match two regexp containing "(" ")".

Here is the kind of tests I made to see why it's not working:

>>> import re
>>> re.match("a","a")
<_sre.SRE_Match object at 0xb7467218>

>>> re.match(re.escape("a"),re.escape("a"))
<_sre.SRE_Match object at 0xb7467410>

>>> re.escape("a(b)")
'a\\(b\\)'

>>> re.match(re.escape("a(b)"),re.escape("a(b)"))

=> No match

Can someone explain me why the regexp doesn't match itself ?

Thanks a lot

Upvotes: 3

Views: 101

Answers (2)

OTZ
OTZ

Reputation: 3083

The first argument is the pattern object, the second is the actual string you are matching against. You shouldn't escape the string itself. Remember, re.escape escapes special characters in regexp.

>>> help(re.match)
Help on function match in module re:

match(pattern, string, flags=0)
    Try to apply the pattern at the start of the string, returning
    a match object, or None if no match was found.

>>> re.match(re.escape('a(b)'), 'a(b)')
<_sre.SRE_Match object at 0x10119ad30>

Upvotes: 1

mgilson
mgilson

Reputation: 310287

You've escaped special characters, so your regex will match the string "a(b)", not the string
'a\(b\)' which is the result of re.escape('a(b)').

Upvotes: 6

Related Questions