说说 Python 正则表达式的高级用法

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 语法灵活,目的都是为了让代码清晰可懂并支持各种可能的情况。

发布了601 篇原创文章 · 获赞 668 · 访问量 88万+

猜你喜欢

转载自blog.csdn.net/deniro_li/article/details/103831631