TypechoJoeTheme

至尊技术网

统计
登录
用户名
密码

Python正则匹配实战:用str.extract高效提取结构化数据

2026-04-14
/
0 评论
/
2 阅读
/
正在检测是否收录...
04/14

正文:

在数据分析中,我们常遇到非结构化文本需要提取关键信息的场景。比如从客服日志提取订单号,或从网页源码抓取特定标签内容。传统字符串方法处理这类需求往往力不从心,而str.extract配合正则表达式却能优雅解决。

一、str.extract核心机制

str.extract是pandas Series对象的方法,其核心优势在于:
1. 直接返回DataFrame结构
2. 支持多捕获组的分列提取
3. 自动处理缺失匹配

基础语法如下:

df['新列'] = df['文本列'].str.extract(r'正则表达式', flags=re.IGNORECASE)

二、电商数据清洗实战

假设我们有包含商品信息的原始文本:
"【爆款】iPhone15 128G ¥6999 | 库存:237件" "华为Mate60 Pro+ ¥8999 (限时补贴)"

需要提取品牌、型号、价格三要素:

import pandas as pd
import re

data = pd.Series([
    "【爆款】iPhone15 128G ¥6999 | 库存:237件",
    "华为Mate60 Pro+ ¥8999 (限时补贴)"
])

pattern = r'(华为|iPhone)(\w+\s?\w+?)\s¥(\d+)'
result = data.str.extract(pattern)
result.columns = ['品牌','型号','价格']

输出结果:
品牌 型号 价格 0 iPhone 15 128G 6999 1 华为 Mate60 Pro+ 8999

三、高级匹配技巧

  1. 非贪婪匹配:用.*?避免过度捕获
  2. 前后断言(?<=¥)\d+匹配价格而不包含¥符号
  3. 条件分支(苹果|安卓)\s?(?:手机|平板)匹配不同设备类型

处理HTML文本时典型示例:

html = "<div class='price'>¥<span>599</span></div>"
price = pd.Series(html).str.extract(r'<span>(\d+)</span>')[0]

四、避坑指南

  1. 中文匹配务必用re.UNICODE标志
  2. 复杂正则建议分步验证:
    python re.compile(r'pattern').match(test_str).groups()
  3. 性能优化:对百万级数据先用str.contains过滤有效行
文本处理PandasPython正则表达式数据清洗str.extract
朗读
赞(0)
版权属于:

至尊技术网

本文链接:

https://www.zzwws.cn/archives/43886/(转载时请注明本文出处及文章链接)

评论 (0)
38,128 文章数
92 评论量

人生倒计时

今日已经过去小时
这周已经过去
本月已经过去
今年已经过去个月