首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何在Python中使用正则表达式提取特定格式的文本?

如何在Python中使用正则表达式提取特定格式的文本?

作者头像
小焱
发布2025-11-12 15:33:35
发布2025-11-12 15:33:35
120
举报
文章被收录于专栏:软件安装软件安装

在Python中使用正则表达式提取特定格式的文本,核心是设计合适的正则模式,然后利用re模块的函数(如findall()search()finditer()等)进行提取。以下是具体步骤和示例:

一、核心步骤
  1. 分析目标格式:明确需要提取的文本规则(如邮箱、手机号、日期等)
  2. 编写正则模式:用正则符号描述目标格式
  3. 选择提取函数:根据需求选择合适的提取方法
  4. 处理提取结果:从匹配对象中获取需要的内容
二、常用提取函数及场景

函数

用途

返回值

re.findall()

提取所有匹配的内容

列表(包含所有匹配的字符串)

re.search()

提取第一个匹配的内容

匹配对象(需用group()获取)

re.finditer()

提取所有匹配的内容(返回迭代器)

迭代器(每个元素是匹配对象)

三、实战示例
1. 提取邮箱地址

邮箱格式特点:用户名@域名.后缀(如user@example.com

代码语言:javascript
复制
import re

text = "联系我们: abc@qq.com, 工作邮箱: xyz_123@gmail.com, 无效邮箱: test@.com"

# 正则模式:匹配邮箱(用户名允许字母、数字、下划线、点)
pattern = r"\w+(\.\w+)*@[a-zA-Z0-9]+\.[a-zA-Z]{2,}"

# 提取所有邮箱
emails = re.findall(pattern, text)
print(emails)
# 输出:['abc@qq.com', 'xyz_123@gmail.com']
2. 提取手机号(中国大陆)

手机号格式:11位数字,以1开头,第二位为3-9

代码语言:javascript
复制
import re

text = "张三:13812345678,李四:19987654321,无效号:12345678901"

# 正则模式:匹配手机号
pattern = r"1[3-9]\d{9}"

# 提取所有手机号
phones = re.findall(pattern, text)
print(phones)
# 输出:['13812345678', '19987654321']
3. 提取日期(多种格式)

支持YYYY-MM-DDYYYY/MM/DDMM-DD-YYYY等格式

代码语言:javascript
复制
import re

text = "今天是2023-10-05,昨天是2023/10/04,项目截止日:09-30-2023"

# 正则模式:匹配多种日期格式(分组提取年、月、日)
pattern = r"(\d{4})[-/](\d{2})[-/](\d{2})|(\d{2})[-/](\d{2})[-/](\d{4})"

# 用finditer()获取详细匹配信息
matches = re.finditer(pattern, text)
for match in matches:
    # 分组1-3对应YYYY-MM-DD,分组4-6对应MM-DD-YYYY
    if match.group(1):
        print(f"日期: {match.group(1)年}{match.group(2)月}{match.group(3)日}")
    else:
        print(f"日期: {match.group(6)年}{match.group(4)月}{match.group(5)日}")

# 输出:
# 日期: 2023年10月05日
# 日期: 2023年10月04日
# 日期: 2023年09月30日
4. 提取HTML中的标签内容

例如提取<a>标签中的链接和文本

代码语言:javascript
复制
import re

html = '''
<a href="https://www.baidu.com">百度</a>
<a href="https://www.google.com">谷歌</a>
'''

# 正则模式:提取href属性和标签文本(使用非贪婪匹配)
pattern = r'<a href="(.*?)">(.*?)</a>'

# 提取所有链接和文本(返回元组列表)
results = re.findall(pattern, html)
for url, text in results:
    print(f"链接: {url}, 文本: {text}")

# 输出:
# 链接: https://www.baidu.com, 文本: 百度
# 链接: https://www.google.com, 文本: 谷歌
四、关键技巧

使用分组():通过()标记需要提取的部分,用group(1)group(2)等获取(group(0)是完整匹配)

代码语言:javascript
复制
# 提取"姓名:XXX, 年龄:XX"中的姓名和年龄
text = "姓名:张三, 年龄:25"
pattern = r"姓名:(.*?), 年龄:(.*?)"
match = re.search(pattern, text)
print(match.group(1))  # 张三
print(match.group(2))  # 25

非贪婪匹配:在*+后加?,避免匹配范围过大(如.*?匹配尽可能少的字符)

转义特殊字符:对.*(等特殊字符,需用\转义(如匹配www.baidu.com中的点,需写为\.

预编译模式:频繁提取时,用re.compile()编译模式提高效率

代码语言:javascript
复制
pattern = re.compile(r"\d+")  # 预编译
print(pattern.findall("A1B2C3"))  # ['1', '2', '3']

通过以上方法,可以灵活提取各种特定格式的文本。关键是根据目标格式设计精准的正则模式,复杂场景下可逐步测试调整模式。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-09-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、核心步骤
  • 二、常用提取函数及场景
  • 三、实战示例
    • 1. 提取邮箱地址
    • 2. 提取手机号(中国大陆)
    • 3. 提取日期(多种格式)
    • 4. 提取HTML中的标签内容
  • 四、关键技巧
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档