混合正则表达式和shell通配符

1 投票
4 回答
577 浏览
提问于 2025-04-16 04:07

我有一个Python脚本,它会读取一个配置文件。这个配置文件里会包含一些用户自定义的正则表达式模式。不过,我在想,我希望用户可以使用完整的正则表达式,或者使用shell通配符。所以我需要能够同时理解这两种方式。

*.txt

.*\.txt$
应该是等价的。

但是,我希望能做到这一点,而不需要用户告诉我他们使用的是哪种方式。这可能吗?也许允许使用完整的正则表达式有点过于复杂了。

4 个回答

0

尽量不要让用户自己去写正则表达式(regex)。用户应该有更简单的方法来配置他们的文件,而不需要使用正则表达式。比如,可以给用户提供几个选项:

  1. 以...开头
  2. 以...结尾
  3. 包含...(可以选择“或”或“和”)
  4. 等等

然后作为程序员,你可以根据这些选项来构建正则表达式。

1

一种可能的方法是:

  1. 尝试把给定的表达式编译成正则表达式。

    a. 如果编译失败(出现语法错误),那就把这个表达式当作通配符字符串来用。

    b. 如果编译成功,就把它当作正则表达式来用。

  2. 如果没有匹配到任何东西,就把它当作通配符字符串来用。

无论如何,都要告诉用户你做了什么(比如“将 pattern.* 解释为正则表达式”),并允许他们覆盖你所猜测的内容。毕竟,正如Zak Thompson所说,有些模式既可以是有效的正则表达式,也可以是通配符模式。

还有一点需要考虑的是,用户可以通过正则表达式轻易地使你的系统过载或崩溃,这种情况被称为灾难性回溯。所以,除非是在用户自己的机器上,否则你可能需要考虑一下是否允许使用正则表达式。

2

你不能这样做。prefix.* 应该匹配什么呢?那 somefiles? 呢?在正则表达式和通配符匹配中,这些有着非常不同的含义,但在这两种情况下都是常见的用法。

撰写回答