Create regex from glob expression

Evgeny Lazin picture Evgeny Lazin · Jan 15, 2009 · Viewed 18.2k times · Source

i write program that parse text with regular expression. Regular expression should be obtained from user. I deside to use glob syntax for user input, and convert glob string to the regular expression internally. For example:

"foo.? bar*" 

should be converted to

"^.*foo\.\w\bar\w+.*"

Somehow, i need to escape all meaningful characters from the string, then i need to replace glob * and ? characters with apropriate regexp syntax. What is the most convinient way to do this?

Answer

user188561 picture user188561 · Oct 12, 2009

no need for incomplete or unreliable hacks. there's a function included with python for this

>>> import fnmatch
>>> fnmatch.translate( '*.foo' )
'.*\\.foo$'
>>> fnmatch.translate( '[a-z]*.txt' )
'[a-z].*\\.txt$'