1

为了构建一种对列表中的项目进行操作的多级正则表达式引擎,我正在寻找一个好的设计理念。这是背景。

所以我会有列表列表,每个项目都可以看作是一个字符串(或文本),

我想要其他类型的列表来匹配这些列表,并且作为匹配器将允许一些运算符,如正则表达式中可用的运算符:*, *?, +, +?

这样我就可以根据['this', '*', 'star']我正在寻找的含义编写匹配器'this',然后是零个或多个项目,然后以'star'.

我的问题是关于 the'*'和其他运算符,什么是正确的 pythonic 设计,所以我也可以实际搜索'*',而不必像 in 那样开始保护它'\*'并开始处理典型\\问题(顺便说一句,可能已经有解析器可用,以便它可以很容易?)

会有像下面这样的全局常量(我的意思是 const 值一个 int,而我的项目是 string/text/re.compiled 模式)会是一个好的设计理念吗?因此有

['this', MyConst.ZERO_MANY, 'star'] 而不是['this', '*', 'star']

这样我也可以拥有匹配['this', MyConst.ZERO_MANY, 'star', with', '*']列表的匹配器,例如:

['this', 'star', with', '*']
['this', 'is', 'with', 'many', 'words', 'before', 'star', 'with', '*']

虽然直接使用'*'作为两个含义,但我需要一些特殊的转义之类的东西,比如在匹配器中

['this', 
 '*', # operator for zero or many
'star',
'with', 
 '\ *' # some hint to say, this time it is not my operator but searching for item('*')
 ]`

(这样做,在使用列表匹配器时,我首先要检查项目的类型,如果是为了int寻找它的特殊含义,我觉得这不符合python的生活方式)

请问你有更好的建议吗?或者这样做是没有意义的想法,如果是这样,请问为什么?

实际上,用于匹配器的列表是字符串,但也可以是正则表达式编译模式,它们在项目级别进行操作,而我还需要一种方式来表达我作为列表序列本身进行操作,以便我可以说,“我们允许在拥有其他东西之前先拥有一些物品”

class MyConst:
    ZERO_MANY = 1
    NON_GREEDY_ZERO_MANY = 2
    ONE_MANY = 3
    NON_GREEDY_ONE_MANY = 4

此致

4

0 回答 0