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

使用正则表达式从Word文件提取数据并映射至DataFrame的问题

解决Word文件数据提取的关联与正则匹配问题

看起来你遇到的两个问题都挺典型的——交易与公司无法关联是因为你把所有文件的文本合并后全局提取,破坏了单文件内的公司-交易对应关系;正则匹配异常则是因为依赖固定换行、没处理好带冒号的字段格式。我来给你一步步解决:

核心问题分析

  1. 关联失效:你把所有docx的文本拼在一起后提取公司名和交易数据,相当于把所有公司的交易混在了一起,自然没法对应上哪家公司对应哪些交易。正确的做法应该是逐个处理每个文件,因为每个文件对应一家公司的多条交易。
  2. 正则问题:原正则里的\n\n是硬编码的换行,但Word转文本后的换行/空格可能不稳定;另外Value (USD)*(.*?)没有处理冒号(比如实际字段可能是Value (USD):),导致匹配不到正确内容。

修复后的完整代码

import docx2txt
import re
import glob
import pandas as pd

# 初始化存储所有记录的列表
all_records = []

# 遍历每个Word文件
for file_path in glob.glob('D:/Projects/Word reader/*.docx'):
    # 提取当前文件的纯文本
    file_text = docx2txt.process(file_path)
    
    # 1. 提取当前文件对应的公司名(处理灵活的空格/换行)
    company_match = re.search(r'Firm name:\s*(.*?)\s*Location', file_text, re.DOTALL)
    if not company_match:
        print(f"⚠️  警告:文件{file_path}中未找到公司名,已跳过")
        continue
    company_name = company_match.group(1).strip()
    
    # 2. 提取当前文件内的所有交易记录(匹配每个交易块)
    # 假设交易块结构为:Deal name: xxx → ... → Value (USD): xxx → Client: xxx
    deal_pattern = re.compile(
        r'Deal name:\s*(.*?)\s*Date:\s*.*?\s*Value \(USD\):\s*(.*?)\s*Client:',
        re.DOTALL
    )
    for deal_match in deal_pattern.finditer(file_text):
        deal_name = deal_match.group(1).strip()
        deal_value = deal_match.group(2).strip()
        
        # 处理无交易值的情况
        if not deal_value:
            deal_value = "No Data"
        
        # 将当前交易与所属公司绑定,添加到记录列表
        all_records.append({
            "Company Name": company_name,
            "Deal Name": deal_name,
            "Deal Value": deal_value
        })

# 转换为你需要的DataFrame格式
df = pd.DataFrame(all_records)
print(df)

代码关键改进点

  • 逐个文件处理:每个文件对应一家公司,提取完公司名后,再在该文件内提取所有交易,确保交易和公司一一绑定。
  • 灵活的正则匹配:
    • 用\s*替代固定的\n\n,适配Word转文本后可能出现的任意空格/换行。
    • 明确匹配Value (USD):里的冒号,避免因字段格式导致的匹配失败。
    • 使用re.DOTALL让.匹配换行符,确保能跨行提取交易块内容。
  • 异常处理:如果某个文件找不到公司名,会给出警告并跳过,避免程序崩溃。

额外优化建议

  • 如果交易块的字段顺序不固定(比如有的文件里Value在Date前面),可以拆分正则,先找到所有Deal name的位置,再逐个提取对应的Value。
  • 可以添加对.doc文件的支持(比如使用textract库替代docx2txt)。
  • 若交易数量较多,可以添加进度提示,方便跟踪处理状态。

内容的提问来源于stack exchange,提问作者Rositsa Ilieva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:19:53