Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正确设计特殊常量,如re*或+,友好阅读_Python_Regex - Fatal编程技术网

Python 正确设计特殊常量,如re*或+,友好阅读

Python 正确设计特殊常量,如re*或+,友好阅读,python,regex,Python,Regex,为了构建一种能够对列表中的项目进行操作的多级正则表达式引擎,我正在寻找一个好的设计思想。这就是背景 我将有一个lisst列表,每个项目都可以被看作一个字符串或文本 我希望有其他类型的列表能够匹配这些列表,因为matcher将允许一些操作符,比如正则表达式中可用的:*、*?、+、+ 这样我就可以根据['this'、'*'、'star']来编写matcher,意思是我在寻找'this',后跟零或多个项,然后以'star'结尾 我的问题是关于“*”和其他操作符,什么是正确的Python设计来实现这一点

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

我将有一个lisst列表,每个项目都可以被看作一个字符串或文本

我希望有其他类型的列表能够匹配这些列表,因为matcher将允许一些操作符,比如正则表达式中可用的:*、*?、+、+

这样我就可以根据['this'、'*'、'star']来编写matcher,意思是我在寻找'this',后跟零或多个项,然后以'star'结尾

我的问题是关于“*”和其他操作符,什么是正确的Python设计来实现这一点我也可以实际搜索“*”,而不必像“\*”那样开始保护它,并开始处理典型的\\问题顺便问一下,是否已经有一个解析器可用,以便它可以很容易地实现

有下面这样的全局常量,我是指值为int的常量,而我的项目是string/text/re.compiled模式,这是一个好的设计想法吗?因此

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

因此,我还可以使用matcher['this',MyConst.ZERO.'u MANY',star',with','*']来匹配如下列表:

['this', 'star', with', '*']
['this', 'is', 'with', 'many', 'words', 'before', 'star', 'with', '*']
直接使用“*”作为这两个意思,我需要一些特殊的转义,比如matcher

['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

最好的祝愿

如果您已经有了一个类,那么如果您只需要将常量放在其中,或者它们与该类非常相关,那么将常量放在那里是一个选项。否则,只需在模块中将其设置为全局。Python有适当的范围,所以这样做是完全好的,不像在PHP这样的语言中,你会用它们污染最全局的范围。好吧,我应该写下,我对什么是正确的Python方式做这件事感兴趣!我的问题不是我应该把常量放在哪里,而是如何实现这种行为以避免“*”重新打开;请编辑这个问题,这样你就可以清楚地看到,你在寻找的是蟒蛇式的方法,而不是人们认为是一种很好的方法。好吧,我只是换一种说法,thxMaybe我没有正确地回答这个问题,但是你看到了re.escape方法吗?