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
相关产品推荐
相关产品推荐

