Python re.search() 方法

Python re 模块 Python re 模块


re.search() 是 Python re 模块中用于搜索模式的函数,它会在字符串中扫描查找匹配指定正则表达式的第一个位置。

re.match() 不同,re.search() 不要求从字符串开头匹配,它会在字符串的任意位置查找匹配。

单词释义search 是搜索、查找的意思。


基本语法与参数

re.search() 是一个模块级函数,直接通过 re 模块调用。

语法格式

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

参数说明

  • pattern
    • 类型:字符串 (str)
    • 描述:要匹配的正则表达式模式。
  • string
    • 类型:字符串 (str)
    • 描述:被搜索的字符串,在其中查找匹配。
  • flags
    • 类型:整数 (int, 可选)
    • 描述:正则表达式标志,用于控制匹配模式。如 re.IGNORECASEre.MULTILINE 等。

函数说明

  • 返回值: 如果找到匹配,返回一个 match 对象;如果没有找到匹配,返回 None
  • 效果: 返回第一个匹配的位置信息,包括匹配的内容、起始位置和结束位置。

实例

让我们通过一系列从简单到复杂的例子,彻底掌握 re.search() 的用法。

示例 1:基础用法 - 查找第一个匹配

实例

import re

# 在字符串中搜索第一个匹配的数字
text = "Python 3.9 是最常用的版本"
result = re.search(r'\d+\.\d+', text)

if result:
    print("找到匹配:", result.group())  # 输出: 3.9
    print("匹配起始位置:", result.start())  # 输出: 7
    print("匹配结束位置:", result.end())  # 输出: 10

运行结果预期:

找到匹配: 3.9
匹配起始位置: 7
匹配结束位置: 10

代码解析:

  1. r'\d+\.\d+' 匹配一个或多个数字,后跟一个点,再跟一个或多个数字(版本号格式)。
  2. re.search() 返回第一个匹配位置的对象。
  3. result.group() 返回匹配的文本内容。
  4. result.start()result.end() 返回匹配的位置索引。

示例 2:查找任意位置的匹配

re.search() 可以在字符串的任意位置查找,这是它与 re.match() 的主要区别。

实例

import re

text = "我的手机号是 138-1234-5678,他的手机号是 139-9876-5432"

# 查找第一个手机号
result = re.search(r'\d{3}-\d{4}-\d{4}', text)

if result:
    print("第一个手机号:", result.group())

运行结果预期:

第一个手机号: 138-1234-5678

代码解析:

  • \d{3}-\d{4}-\d{4} 匹配中国手机号格式(3位-4位-4位)。
  • re.search() 找到第一个匹配就返回,不会继续查找。

示例 3:使用标志位忽略大小写

通过 flags 参数可以改变匹配行为,如忽略大小写。

实例

import re

text = "Python is a Powerful Programming Language"

# 使用 re.IGNORECASE 忽略大小写
result = re.search(r'python', text, re.IGNORECASE)

if result:
    print("找到:", result.group())  # 输出: Python

运行结果预期:

找到: Python

代码解析:

  • re.IGNORECASE 让匹配不区分大小写,所以能匹配到 "Python"。

示例 4:提取分组内容

使用圆括号 () 可以创建分组,提取感兴趣的特定部分。

实例

import re

text = "用户邮箱: [email protected]"

# 使用分组提取用户名和域名
result = re.search(r'(\w+)@(\w+\.\w+)', text)

if result:
    print("完整匹配:", result.group())      # [email protected]
    print("第1个分组:", result.group(1))    # user
    print("第2个分组:", result.group(2))    # example.com

运行结果预期:

完整匹配: [email protected]
第1个分组: user
第2个分组: example.com

代码解析:

  • 圆括号 () 创建了两个分组。
  • result.group(1)result.group(2) 分别提取两个分组的内容。

Python re 模块 Python re 模块