当前位置:首页>python>Python 正则表达式:re.match / re.search / re.findall / re.finditer 超详细对比

Python 正则表达式:re.match / re.search / re.findall / re.finditer 超详细对比

  • 2026-10-11 08:31:14
Python 正则表达式:re.match / re.search / re.findall / re.finditer 超详细对比

一、先记住一句话

这四个函数是 Python re 模块最核心的 4 个查找方法,功能完全不同:

  • • re.match():只从字符串开头匹配,开头不满足直接失败
  • • re.search():整个字符串搜索,找到第一个就停止
  • • re.findall():查找所有匹配,返回 列表
  • • re.finditer():查找所有匹配,返回 迭代器(节省内存)

二、re.match() —— 只匹配开头

1. 作用

从字符串最开头开始匹配,开头不匹配直接返回 None。

2. 语法

re.match(正则模式, 字符串)

3. 示例

import re

# 成功:开头是数字
print(re.match(r"\d+", "123abc"))  # 返回匹配对象

# 失败:开头不是数字
print(re.match(r"\d+", "abc123"))  # None

4. 什么时候用?

  • • 必须以某内容开头才合法
  • • 如:判断手机号、身份证、路径开头

三、re.search() —— 全局找第一个

1. 作用

扫描整个字符串,找到第一个匹配就返回,不再继续找。

2. 语法

re.search(正则模式, 字符串)

3. 示例

import re

s = "abc123def456"

res = re.search(r"\d+", s)
print(res.group())  # 123(只返回第一个)

4. 特点

  • • 不限制开头
  • • 只返回第一个匹配
  • • 找不到返回 None

四、re.findall() —— 找所有,返回列表(最常用)

1. 作用

找到字符串中所有匹配的内容,以 列表 形式返回。

2. 语法

re.findall(正则模式, 字符串)

3. 示例

s = "abc123def456xyz789"
res = re.findall(r"\d+", s)
print(res)  # ['123','456','789']

4. 特点

  • • 找全部
  • • 返回 list
  • • 没有匹配返回 空列表 []

五、re.finditer() —— 找所有,返回迭代器

1. 作用

查找所有匹配,返回一个迭代器,里面是一个个匹配对象。

2. 语法

re.finditer(正则模式, 字符串)

3. 示例

s = "abc123def456"

it = re.finditer(r"\d+", s)

formatchin it:
print(match.group())  # 123,然后 456

4. 特点

  • • 不一次性生成列表
  • • 节省内存(适合大量数据)
  • • 循环获取每个匹配
  • • 可以获取 位置、分组 等信息

六、最核心区别对比表(必背)

方法
匹配范围
返回结果
是否找全部
最适合场景
re.match()
只开头
匹配对象 / None
否
开头验证
re.search()
整个字符串
匹配对象 / None
否(只第一个)
找一个
re.findall()
整个字符串
列表
是
提取所有结果
re.finditer()
整个字符串
迭代器
是
大数据、需要详细信息

七、分组(捕获)在四个方法中的表现(重点难点)

1. 无分组时

四个方法表现一致:返回匹配到的字符串。

2. 有一个分组 ( )

  • • findall() 会只返回分组内容
  • • search / match / finditer 返回完整匹配对象

示例:

s = "age:18, score:95"
print(re.findall(r"(\d+)", s))  # ['18','95']

3. 多个分组 ( )( )

findall() 返回 元组列表

s = "a1 b2 c3"
print(re.findall(r"([a-z])(\d)", s))
# [('a','1'), ('b','2'), ('c','3')]

八、获取匹配内容的方法

只要得到 匹配对象,就可以用:

  • • .group() → 获取匹配字符串
  • • .start() → 开始索引
  • • .end() → 结束索引
  • • .span() → (开始,结束)

示例:

res = re.search(r"\d+", "abc123")
print(res.group())  # 123
print(res.span())   # (3,6)

九、最经典使用场景

1. 验证开头

re.match(r"^[a-z]+", text)

2. 判断是否包含某内容

if re.search(r"\d", text):
print("包含数字")

3. 提取所有数据(最简单)

nums = re.findall(r"\d+", text)

4. 大数据量、需要位置/分组信息

for m in re.finditer(r"\w+@\w+\.\w+", text):
print(m.group())

📝 本章超级总结

  1. 1. re.match()
    只匹配开头,适合校验格式。
  2. 2. re.search()
    全局找第一个,适合判断是否存在。
  3. 3. re.findall()
    找全部,返回列表,最简单最常用。
  4. 4. re.finditer()
    找全部,返回迭代器,省内存、功能强。

最新文章

随机文章