如何使Python忽略缩进和重新表达式中的\ n

时间:2015-05-08 04:52:52

标签: python regex string

我需要匹配一个非常大的字符串:

"""
A=...B=...C=...D=...
"""

我使用了这样的重新表达来匹配字符串:

'''
A=.+?
[^ABCD]+?
C=.+?
'''

由于表达式非常长,我根据PEP8将其分成几行。但python也与我的隐式\n匹配,即它试图匹配:

A=(.+?)\\n[^ABCD]+?\\nC=(.+?)\\n

绝对不是我想要的。此外,我不能使用漂亮的缩进,因为python也匹配那些空格。

那我怎么能摆脱这个呢?我想要很好的缩进和正确的匹配。

2 个答案:

答案 0 :(得分:3)

创建正则表达式时指定re.VERBOSE(也称为re.X)标志:

pattern = re.compile('''
A=.+?
[^ABCD]+?
C=.+?
''', re.VERBOSE)

来自docs

  

此标志允许您编写看起来更好的正则表达式。   除非在字符中,否则忽略模式中的空格   类或前面带有未转义的反斜杠,并且当一行包含时   a '#'既不在字符类中,也不在非转义字符之前   反斜杠,从最左边的所有字符'#'到结尾   该行被忽略。

答案 1 :(得分:2)

您需要使用re.VERBOSE模式,您甚至可以评论您的

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