对于正则表达式,是否存在与Perl“ / x”修饰符等效的Python?


问题内容

Perl使使用修饰符构造可读的正则表达式变得容易/x。此修饰符允许编写正则表达式字符串,并忽略这些字符串中的所有空格。换句话说,正则表达式的逻辑部分可以用空格或什至回车符分隔,从而具有很高的可读性。在Python中,我看到的唯一方法是构造这样的正则表达式字符串,在中间步骤中从中删除空格,然后使用结果字符串进行匹配。有没有更优雅的方式做到这一点?


问题答案:

是的,通过设置re.X/re.VERBOSE标志

该标志允许您编写看起来更好的正则表达式。模式中的空格将被忽略,除非是在字符类中,或者以未转义的反斜杠开头,或者在诸如*?(?:或的标记中(?P<...>。如果一行中包含的#字符不在字符类中,并且前面没有未转义的反斜杠,则从最左边开始#到该行末尾的所有字符都将被忽略。

这意味着与十进制数字匹配的以下两个正则表达式对象在功能上相等:

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

这几乎与/xPerl标志完全一样。

您可以在(?x:...)(启用)和(?-x:...)(禁用)分组中的模式子部分中控制同一标志。