从glob表达式创建正则表达式

Evg*_*zin 20 regex search glob

我编写用正则表达式解析文本的程序.应从用户处获得正则表达式.我希望使用glob语法进行用户输入,并在内部将glob字符串转换为正则表达式.例如:

"foo.? bar*" 
Run Code Online (Sandbox Code Playgroud)

应转换为

"^.*foo\.\w\bar\w+.*"
Run Code Online (Sandbox Code Playgroud)

不知何故,我需要从字符串中转义所有有意义的字符,然后我需要替换glob*和?具有适当的正则表达式语法的字符.这样做最方便的方法是什么?

小智 49

不需要不完整或不可靠的黑客攻击.python包含了一个函数

>>> import fnmatch
>>> fnmatch.translate( '*.foo' )
'.*\\.foo$'
>>> fnmatch.translate( '[a-z]*.txt' )
'[a-z].*\\.txt$'
Run Code Online (Sandbox Code Playgroud)

  • 当您需要一个函数时,通过谷歌搜索一个片段,然后发现该函数位于内置库中,这是一种美妙的感觉。这就是我喜欢Python的原因。 (3认同)