我需要匹配一个非常大的字符串:
"""
A=...B=...C=...D=...
"""
我使用了这样的重新表达来匹配字符串:
'''
A=.+?
[^ABCD]+?
C=.+?
'''
由于表达式非常长,我根据PEP8
将其分成几行。但python也与我的隐式\n
匹配,即它试图匹配:
A=(.+?)\\n[^ABCD]+?\\nC=(.+?)\\n
绝对不是我想要的。此外,我不能使用漂亮的缩进,因为python也匹配那些空格。
那我怎么能摆脱这个呢?我想要很好的缩进和正确的匹配。
答案 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*")