25-管理复杂的正则表达式
7.13 管理复杂的正则表达式
如果要匹配的文本模式很简单,那么使用正则表达式就很好。但匹配复杂的文本模式,可能需要长的、令人费解的正则表达式。你可以告诉 re.compile()
忽略正则表达式字符串中的空白符和注释,从而缓解这一点。要实现这种详细模式,可以向 re.compile()
传入变量 re.VERBOSE
作为第二个参数。
现在,不必使用这样难以阅读的正则表达式:
phoneRegex = re.compile(r'((\d{3}|\(\d{3}\))?(\s|-|\.)?\d{3}(\s|-|\.)\d{4}
(\s*(ext|x|ext.)\s*\d{2,5})?)')
你可以将正则表达式放在多行中,并加上注释,像这样:
phoneRegex = re.compile(r'''(
(\d{3}|\(\d{3}\))? # area code
(\s|-|\.)? # separator
\d{3} # first 3 digits
(\s|-|\.) # separator
\d{4} # last 4 digits
(\s*(ext|x|ext.)\s*\d{2,5})? # extension
)''', re.VERBOSE)
请注意,前面的例子使用三重引号 (''')
创建了一个多行字符串,这样就可以将正则表达式定义放在多行中,让它更具可读性。
正则表达式字符串中的注释规则与普通的Python代码一样:#符号和它后面直到行末的内容都被忽略。而且,在表示正则表达式的多行字符串中,多余的空白字符也不认为是要匹配的文本模式的一部分。这让你能够组织正则表达式,让它更具可读性。