python re.X 与自动换行区别
Python 提供了一个标志(re.X
或 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 个回答
3
我觉得这就像“西红柿”与“番茄”的区别一样。这个“x”正则表达式的标志并不是Python独有的,在其他一些语言中,它的用法可能更容易理解(想象一下到处都是+
,会让人觉得很烦)。
我还认为,它强制你清楚地标明哪些空格是表达式的一部分,这其实是件好事,因为这样可以消除任何模糊性,让你不容易错过那些依赖空格的正则表达式的小问题。
最后一个理由是,你可以把这个模式直接复制到另一个有相同标志的语言中,而且几乎不需要做什么修改。在这种情况下,我就得去掉很多r
和撇号。
顺便说一下,你总是可以使用re.X
选项来连接。
5
前者可以放在一个单独的文本文件里,然后直接加载,不需要用到 literal_eval
。如果正则表达式很复杂(或者有多种不同的正则表达式可选),这样做可能会更方便。