Skip to content
Advertisement

Regular expression in Python won’t match end of a string

I’m just learning Python, and I can’t seem to figure out regular expressions.

r1 = re.compile("$.pdf")
if r1.match("spam.pdf"):
    print 'yes'
else:
    print 'no'

I want this code to print ‘yes’, but it obstinately prints ‘no’. I’ve also tried each of the following:

r1 = re.compile(r"$.pdf")

r1 = re.compile("$ .pdf")

r1 = re.compile('$.pdf')

if re.match("$.pdf", "spam.pdf")

r1 = re.compile(".pdf")

Plus countless other variations. I’ve been searching for quite a while, but can’t find/understand anything that solves my problem. Can someone help out a newbie?

Advertisement

Answer

You’ve tried all the variations except the one that works. The $ goes at the end of the pattern. Also, you’ll want to escape the period so it actually matches a period (usually it matches any character).

r1 = re.compile(r".pdf$")

However, an easier and clearer way to do this is using the string’s .endswith() method:

if filename.endswith(".pdf"):
    # do something

That way you don’t have to decipher the regular expression to understand what’s going on.

User contributions licensed under: CC BY-SA
8 People found this is helpful
Advertisement