python re.X 与自动换行区别

8 投票
2 回答
1173 浏览
提问于 2025-04-17 15:14

Python 提供了一个标志(re.Xre.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 个回答

3

我觉得这就像“西红柿”与“番茄”的区别一样。这个“x”正则表达式的标志并不是Python独有的,在其他一些语言中,它的用法可能更容易理解(想象一下到处都是+,会让人觉得很烦)。

我还认为,它强制你清楚地标明哪些空格是表达式的一部分,这其实是件好事,因为这样可以消除任何模糊性,让你不容易错过那些依赖空格的正则表达式的小问题。

最后一个理由是,你可以把这个模式直接复制到另一个有相同标志的语言中,而且几乎不需要做什么修改。在这种情况下,我就得去掉很多r和撇号。


顺便说一下,你总是可以使用re.X选项来连接。

5

前者可以放在一个单独的文本文件里,然后直接加载,不需要用到 literal_eval。如果正则表达式很复杂(或者有多种不同的正则表达式可选),这样做可能会更方便。

撰写回答