为了构建一种对列表中的项目进行操作的多级正则表达式引擎,我正在寻找一个好的设计理念。这是背景。
所以我会有列表列表,每个项目都可以看作是一个字符串(或文本),
我想要其他类型的列表来匹配这些列表,并且作为匹配器将允许一些运算符,如正则表达式中可用的运算符:*, *?, +, +?
这样我就可以根据['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
此致