当前位置:嗨网首页>书籍在线阅读

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代码一样:#符号和它后面直到行末的内容都被忽略。而且,在表示正则表达式的多行字符串中,多余的空白字符也不认为是要匹配的文本模式的一部分。这让你能够组织正则表达式,让它更具可读性。