python re.X vs自动线延续

时间:2013-02-08 14:38:07

标签: python regex annotations comments

Python提供了一个标志(re.X or re.VERBOSE)以允许注释正则表达式:

a = re.compile(r"""\d +  # the integral part
                   \.    # the decimal point
                   \d *  # some fractional digits""", re.X)

但是,使用自动字符串连接,您可以实现基本相同的事情:

a = re.compile(r'\d+' # integral part
               r'\.'  # decimal point
               r'\d*' # optional fractional digits
              )

我认为我没有真正看到后一种形式使用,但(恕我直言)它使得更容易阅读正则表达式(我不需要试图弄清楚哪些空白被转义,以及什么空格被忽略......等等。)我的评论由我的文本编辑器格式化为评论。是否有理由更喜欢前者而不是后者或签证?或者这真的是番茄 - 番茄问题吗?

2 个答案:

答案 0 :(得分:4)

前者可以放在自己的文本文件中,然后加载而不用literal_eval。对于复杂的RE(或多个不同RE的选择),这可能是一个好处。

答案 1 :(得分:3)

我会说这是番茄酱。 “x”正则表达式标志不是python独有的,并且在串联操作更冗长的语言中可能更有意义(想象+到处添加噪声)。

我还考虑这样一个事实:它强制你正确地指出哪个空格是表达式的一部分是积极的东西,因为它消除了任何歧义,并且很难错过regexen中依赖于空格的怪癖。

最后一个论点是,你可以将确切的模式复制到另一种具有相同标志的语言,并且它可以毫不费力地工作。在后一种情况下,我必须删除大量的r和撇号。


顺便说一句,您总是可以将 re.X选项连接起来。