注册

详解Python re.fullmatch.VERBOSE函数:启用详细模式

re.fullmatch()是Python re库中一种常用的匹配函数,用于在给定字符串(或文本)的整个范围内查找匹配正则表达式的子串,只有整个字符串都与正则表达式匹配时,才算匹配成功。而VERBOSE则是用来忽略正则表达式中的空白以及注释,提高正则表达式可读性的函数。

使用方法

re.fullmatch(pattern, string, flags=0)函数用来匹配整个字符串和正则表达式的完全匹配。参数说明:

  • pattern:正则表达式。
  • string:待匹配的字符串。
  • flags:可选参数,用于控制正则表达式匹配方式,具体含义可以参考Python官方文档。

VERBOSE的作用就是使得我们可以在写正则表达式的时候稍稍有些难以理解的语法,增加注释以及空白,让代码更易读,也方便修改等。可以通过在正则表达式的前面添加(?x)启用VERBOSE模式。除此之外,VERBOSE模式下还支持将正则表达式拆分成多行,可以在后面通过反斜杠\来连接两行。

实例说明

使用 VERBOSE 模式

在下面的例子中,我们使用VERBOSE模式来匹配有效的邮箱地址,在正则表达式中,我们通过添加注释,让代码优雅且容易读。

import re

pattern = re.compile(r'''
    ^             #匹配输入字符串的开始
    [a-zA-Z0-9._%+-]+    #用户名字母数字的字符集
    @             #必须的 at 符号
    [a-zA-Z0-9.-]+    #域名中的字母数字字符集
    (\.[a-zA-Z]{2,})  #TLD(.com、.org 等)后缀
    $             #匹配输入字符串的结尾
    ''', re.VERBOSE)

email1 = 'name.surname@company.com'
print(pattern.fullmatch(email1))

email2 = 'name@company.co.uk'
print(pattern.fullmatch(email2))

email3 = 'name.surname@company.first.second.third.com'
print(pattern.fullmatch(email3))

与re.Pattern.match()函数的差异

考虑一下只想匹配某个字符串是否在正则表达式中的情况。在这种情况下,我们可以使用re.Pattern.match()re.fullmatch()对该字符串进行匹配。但是它们之间存在一些差异,下面的例子演示了它们之间的差异。

import re

pattern = re.compile(r'\w+-\d+')
text = 'this-is-1 and another-2 and some more text'

# 使用re.Pattern.match()只能匹配到第一个符合规则的子串
match = pattern.match(text)
print('match:', match)

# 使用re.fullmatch()不能匹配到任何一个符合规则的子串,因为它要求必须匹配整个字符串
fullmatch = pattern.fullmatch(text)
print('fullmatch:', fullmatch)

总的来说,re.fullmatch()函数用于匹配整个字符串,可以用来检查字符串是否符合某个模式,而VERBOSE则是用于提高正则表达式可读性的函数。