Python正则表达式样式

Don*_*ner 2 python regex

是否应该使用正则表达式的Pythonic"标准"?

我通常做的是在我的模块顶部执行一堆re.compile语句并将对象存储在全局变量中......然后在我的函数和类中使用它们.

我可以在我将使用它们的函数中定义正则表达式,但是每次都会重新编译它们.

或者,我可以完全放弃re.compile,但如果我多次使用相同的正则表达式,似乎重新编译会产生不必要的开销.

Way*_*ner 6

一种更清洁的方法是使用字典:

PATTERNS = {'pattern1': re.compile('foo.*baz'),
            'snake': re.compile('python'),
            'knight': re.compile('[Aa]rthur|[Bb]edevere|[Ll]auncelot')}
Run Code Online (Sandbox Code Playgroud)

这将解决您的污染命名空间的问题,而且对于任何查看代码的人来说,显而易见的是PATTERNS是什么以及将用于什么,并且它满足全局变量的CAPS约定.此外,您可以轻松调用re.match(PATTERNS[pattern]),或者您的逻辑调用.