Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MongoDB/PyMongo: how to 'escape' parameters in regex search?

I'm using pymongo and want to do a search for items starting with a certain sequence of characters. I might implement that like this:

items = collection.find({ 'key': '/^text/' })

This should work, but what if text is a variable? I could do something like:

items = collection.find({ 'key': '/^' + variable + '/' })

But now if the text in variable contains any characters with special regex meaning (such as $), the query no longer behaves as expected. Is there a way to do some sort of parameter binding? Do I have to sanitize variable myself? Is that even reliably possible?

Thanks!

like image 745
Sam Avatar asked Nov 05 '12 01:11

Sam


1 Answers

You have to assemble the regex programmatically. So either:

import re
regex = re.compile('^' + re.escape(variable))
items = collection.find({ 'key': regex })

OR

items = collection.find({'key': { '$regex': '^' + re.escape(variable) }})

Note that the code uses re.escape to escape the string in case it contains special characters.

like image 65
JohnnyHK Avatar answered Oct 26 '22 23:10

JohnnyHK