>>> from env_helper import info; info()
页面更新时间: 2024-03-29 09:19:09
运行环境:
    Linux发行版本: Debian GNU/Linux 12 (bookworm)
    操作系统内核: Linux-6.1.0-18-amd64-x86_64-with-glibc2.36
    Python版本: 3.11.2

1.2. 使用正则表达式对象

Python 中所有正则表达式的函数都在 re 模块中。在交互式环境中输入以下代码,导入该模块:

>>> import re

re 模块的 compile() 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。 该对象拥有一系列方法用于正则表达式匹配和替换。 例如,向 re.compile() 传入一个字符串值表示正则表达式, 它将返回一个 Regex 模式对象(简称为 Regex 对象)。

要创建一个 Regex 对象来匹配电话号码模式, 就在交互式环境中输入以下代码。

>>> regobj = re.compile('\d\d\d-\d\d\d-\d\d\d\d')

现在 regobj 变量包含了一个 Regex 对象。

1.2.1. 匹配 Regex 对象

Regex 对象的 search() 方法查找传入的字符串,寻找该正则表达式的所有匹配。 如果字符串中没有找到该正则表达式模式,search() 方法将返回None 。 如果找到了该模式,search() 方法将返回一个 Match 对象。 Match 对象有一个 group() 方法,它返回被查找字符串中实际匹配的文本。

re.search方法

re.search 扫描整个字符串并返回第一个成功的匹配。

函数语法:

re.search(pattern, string, flags=0)

函数参数说明:

参数 | 描述

  • pattern | 匹配的正则表达式

  • string | 要匹配的字符串。

  • flags | 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

匹配成功 re.search 方法返回一个匹配的对象,否则返回None。

我们可以使用 group(num)groups() 匹配对象函数来获取匹配表达式。

匹配对象方法 | 描述

  • group(num=0) |匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。

  • groups() | 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。

例如,在交互式环境中输入以下代码:

>>> mo = regobj.search('My number is 415-555-4242.')
>>> print('Phone number found: ' + mo.group())
Phone number found: 415-555-4242

变量名 mo 是一个通用的名称,用于 Match 对象。

这里,我们将期待的模式传递给 re.compile() ,并将得到的 Regex 对象保存在 phoneNumRegex 中。 然后我们在 phoneNumRegex 上调用 search() ,向它传入想查找的字符串。查找的结果保存在变量 mo 中。 在这个例子里,我们知道模式会在这个字符串中找到,所以我们知道会返回一个 Match 对象。 知道 mo 包含一个 Match 对象,而不是空值 None ,我们就可以在 mo 变量上调用 group() ,返回匹配的结果。 将 mo.group() 写在打印语句中,显示出完整的匹配,即 415-555-4242

如果对象没找到,可以进行判断:

>>> mo2 = regobj.search('my number is 41555433.')
>>> print('got') if mo2 else print('not got')
not got

re.compile() 传递原始字符串

回忆一下, Python 中转义字符使用倒斜杠()。 字符串 V 表示一个换行字符, 而不是倒斜杠加上一个小写的 n 。 你需要输入转义字符 \\ ,才能打印出一个倒斜杠。 所以 '\n' 表示一个倒斜杠加上一个小写的 n 。 但是,通过在字符串的第一个引号之前加上 r , 可以将该字符串标记为原始字符串,它不包括转义字符。

因为正则表达式常常使用倒斜杠, 向 re.compile() 函数传入原始字符串就很方便, 而不是输入额外得到斜杠。输入 r'\d\d\d-\d\d\d-\d\d\d\d' , 比输入 '\\d\\d\\d-\\d\\d\\d-\\d\\d\\d\\d' 要容易得多。

1.2.2. re.match() 函数

re.match() 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话, match() 就返回 None

函数语法:

re.match(pattern, string, flags=0)

函数参数说明:

  • pattern 匹配的正则表达式

  • string 要匹配的字符串。

  • flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

我们可以使用 group(num)groups() 匹配对象函数来获取匹配表达式。

  • group(num=0) 匹配的整个表达式的字符串, group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。

  • groups() 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。

实例 1:

在起始位置匹配

>>> print(re.match('www', 'www.runoob.com').span())
(0, 3)

不在起始位置匹配

>>> print(re.match('com', 'www.runoob.com'))
None

1.2.4. 正则表达式匹配复习

虽然在 Python中使用正则表达式有几个步骤, 但每一步都相当简单。

  1. import re 导入正则表达式模块。

  • re.compile() 函数创建一个 Regex 对象(记得使用原始字符串)。

  • Regex 对象的 search() 方法传入想查找的字符串。它返回一个 Match 对象。

  • 调用 Match 对象的 group() 方法,返回实际匹配文本的字符串。