1 让表达式支持换行与注释
复杂的正则表达式很长,不好理解。我们向 re.compile() 方法的第二个参数传入变量 re.VERBOSE ,让其允许在正则表达式中使用换行、空格和注释。
phone_regex = re.compile(r'''(
\d{4}-\d{7} # 4 位区号加 7 位号码
|
\d{3}-\d{8} # 3 位区号加 8 位号码
)''',re.VERBOSE)
result = phone_regex.findall('几米的座机电话为 010-43925839、0592-4192839')
print(result)
运行结果:
['010-43925839', '0592-4192839']
在此我们使用了三重引号 ('") ,创建了一个多行字符串。这样就可以将正则表达式的定义放在多行中,让它变得更清晰可读。
2 使用管道字符组合正则表达式匹配模式
有时候,我们希望匹配模式即支持换行与注释,还必须忽略大小写。 但 re.compile() 方法只支持两个入参,无法实现。这时,我们可以使用管道字符(|)将入参组合起来,从而绕过这个限制。管道字符在这里称为 “ 按位或 ” 操作符。
phone_regex = re.compile(r'''(
ha\w+ # ha 开头的单词
|
li\w+ # li 开头的单词
)''',re.VERBOSE|re.IGNORECASE)
result = phone_regex.findall('License and registration please. Have you been drinking tonight, sir?'
' I had one or two glasses of eggnog, but nothing else. ')
print(result)
运行结果:
['License', 'Have', 'had']
Python 语法灵活,目的都是为了让代码清晰可懂并支持各种可能的情况。