代码之家  ›  专栏  ›  技术社区  ›  Donald Miner

python正则表达式样式

  •  2
  • Donald Miner  · 技术社区  · 14 年前

    是否有关于如何使用正则表达式的蟒蛇式“标准”?

    我通常做的是 重新编译 语句位于模块顶部,并将对象存储在全局变量中…然后在我的函数和类中使用它们。

    我可以在我将要使用的函数中定义regex,但之后每次都会重新编译它们。

    或者,我可以完全放弃重新编译,但是如果我多次使用同一个regex,重新编译可能会产生不必要的开销。

    3 回复  |  直到 14 年前
        1
  •  6
  •   Wayne Werner    14 年前

    一种更干净的方法是使用字典:

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

    这将解决您的名称空间受到污染的问题,而且对于查看您的代码的任何人来说,使用什么模式和将使用什么模式都是显而易见的,并且它满足全局的caps约定。此外,您可以轻松地拨打 re.match(PATTERNS[pattern]) 或者你的逻辑需要的任何东西。

        2
  •  4
  •   Andrew Walker    14 年前

    我也倾向于使用你的第一种方法,但我从未做过基准测试。有一点需要注意, from the documentation 是这样的:

    传递给re.match()、re.search()或 re.compile()被缓存,因此一次只使用几个正则表达式的程序 不用担心编译正则表达式。

    一个担心是您可能有一些不被使用的正则表达式。如果在模块加载时编译所有表达式,则可能会产生编译表达式的成本,但不会从“优化”中受益。我想除非你编译,否则这没关系 太多了 不使用的正则表达式。

    我推荐的一件事是使用 re.VERBOSE (或) re.X )标记并包含注释和空白,以使最普通的正则表达式之外的内容更具可读性。

        3
  •  1
  •   g.d.d.c    14 年前

    我个人使用您的第一种方法,在这种方法中,我将重用的表达式在早期进行编译,并在全局范围内提供给需要它们的函数/方法。根据我的经验,这是可靠的,并减少了它们的总编译时间。