混合正则表达式和shell通配符
我有一个Python脚本,它会读取一个配置文件。这个配置文件里会包含一些用户自定义的正则表达式模式。不过,我在想,我希望用户可以使用完整的正则表达式,或者使用shell通配符。所以我需要能够同时理解这两种方式。
*.txt
和
.*\.txt$
应该是等价的。
但是,我希望能做到这一点,而不需要用户告诉我他们使用的是哪种方式。这可能吗?也许允许使用完整的正则表达式有点过于复杂了。
4 个回答
0
尽量不要让用户自己去写正则表达式(regex)。用户应该有更简单的方法来配置他们的文件,而不需要使用正则表达式。比如,可以给用户提供几个选项:
- 以...开头
- 以...结尾
- 包含...(可以选择“或”或“和”)
- 等等
然后作为程序员,你可以根据这些选项来构建正则表达式。
1
一种可能的方法是:
尝试把给定的表达式编译成正则表达式。
a. 如果编译失败(出现语法错误),那就把这个表达式当作通配符字符串来用。
b. 如果编译成功,就把它当作正则表达式来用。
如果没有匹配到任何东西,就把它当作通配符字符串来用。
无论如何,都要告诉用户你做了什么(比如“将 pattern.*
解释为正则表达式”),并允许他们覆盖你所猜测的内容。毕竟,正如Zak Thompson所说,有些模式既可以是有效的正则表达式,也可以是通配符模式。
还有一点需要考虑的是,用户可以通过正则表达式轻易地使你的系统过载或崩溃,这种情况被称为灾难性回溯。所以,除非是在用户自己的机器上,否则你可能需要考虑一下是否允许使用正则表达式。
2
你不能这样做。prefix.*
应该匹配什么呢?那 somefiles?
呢?在正则表达式和通配符匹配中,这些有着非常不同的含义,但在这两种情况下都是常见的用法。