混合regex和shell通配符

2024-05-16 23:18:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个从配置文件读取的python脚本。配置文件将包含一些用户定义的regex模式。但是,我想让用户使用完整的regex模式,或者shell通配符。所以我应该能解释两者

*.txt
以及
.*\.txt$
正确地。所以这两个应该是相等的。在

不过,我希望能够做到这一点,而不让用户告诉我他们在使用什么。这有可能吗?也许允许使用完整的regex有点过头了。在


Tags: 用户txt脚本定义配置文件模式shellregex
3条回答

可能有一种方法:

  1. 尝试将给定表达式编译为正则表达式。在

    如果失败(语法错误),则将表达式用作全局字符串。在

    如果它没有编译失败,就用它作为正则表达式。

  2. 如果它与任何内容都不匹配,请使用它作为全局字符串。

无论如何,告诉用户您做了什么(“将pattern.*解释为正则表达式”),并允许他覆盖您猜测的任何内容。毕竟,正如Zak Thompson所写的,有些模式既可以是有效的regex,也可以是glob模式。在

另一件要考虑的事情是,用户可以通过catastrophic backtracking使用regex很容易过载或使系统崩溃。因此,除非是用户自己的机器,否则您可能会首先考虑允许regex。在

你不能这么做。prefix.*应该匹配什么?那somefiles?呢?它们在regex和glob匹配中有着非常不同的含义,但在这两种情况下都是常见的用例。在

例如,考虑一下模式

foo?.txt

在glob语法中,这将匹配foo1.txt,福兹.txt但不是fo.txt文件, 离岸价.txt或者foozxt 在regexp syntaxt中,这将匹配fo.txt文件,但不是福兹.txt在

两种税你都不能接受。我能想到的唯一选择是让用户给表达式加前缀,即

^{pr2}$

相关问题 更多 >