You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何用正则提取文本中姓名、ID、次数及BRL金额信息

解决方案

针对你给出的条目结构,直接使用带捕获组的正则表达式一次性提取所有需要的字段即可,你之前的正则只匹配了ID且前后加了多余空格、没有设置其他字段的捕获组,是无法提取到剩余内容的核心原因。

最终可用代码

import re
import pandas as pd

# 带4个捕获组的正则,依次对应:人员姓名、ID号、次数、总金额数值
pattern = re.compile(r'([^\-]+?)\s*-\s*((?:\d{2}\.?\d{3}\.?\d{3}\/?\d{4}-?\d{2}|\d{3}\.?\d{3}\.?\d{3}-?\d{2}))\s*-\s*\([^)]+\)\s*-\s*(\d+)\s*总金额:R\$([\d.,]+)')

# 替换为你自己的长文本即可
source_text = """
张三 - 12.345.678/0001-90 - (随机大写文本1) - 12 总金额:R$12345.67
李四 - 987.654.321-01 - (随机大写文本2) - 35 总金额:R$98765,43
"""

# 提取所有匹配条目
match_result = pattern.findall(source_text)

# 直接转成DataFrame
df = pd.DataFrame(match_result, columns=['人员姓名', 'ID号', '次数', '总金额'])

# 可选:字段格式清洗,按需使用
df['人员姓名'] = df['人员姓名'].str.strip()
df['次数'] = df['次数'].astype(int)
# 适配巴西金额用逗号做小数位的格式
df['总金额'] = df['总金额'].str.replace(',', '.').astype(float)

print(df)

适配调整说明

如果括号内的随机文本包含除大写字母、空格之外的其他字符,正则中的\([^)]+\)已经做了通用适配,会匹配括号内的所有内容直到右括号,不需要额外调整。

内容的提问来源于stack exchange,提问作者Gabriel Amarante

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 01:57:01