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

使用docx将Word转文本后,能否提取位置不固定的指定前缀字符串?

明确结论

使用python-docx将Word文档转成纯文本后,完全可以检索到位置不固定、仅带固定前缀Amount:的金额字段,不需要依赖字段在文档里的固定位置索引。

可落地实现方案

1. 全量提取文档文本

不要只扫正文段落,避免漏内容,把所有可能存文本的节点都扫一遍拼成完整长字符串:

  • 先遍历所有普通段落,提取段落文本
  • 再遍历文档内所有表格的单元格,提取单元格内的文本,这部分是最容易漏的,大部分带金额的正式文档都会把数值放在表格里
  • 有特殊需求的话,额外加扫页眉、页脚、文本框内的文本,常规场景可以先不做

对应参考代码:

from docx import Document

def get_doc_full_text(file_path):
    doc = Document(file_path)
    text_parts = []
    # 提取普通段落内容
    for para in doc.paragraphs:
        text_parts.append(para.text)
    # 提取表格内内容
    for table in doc.tables:
        for row in table.rows:
            for cell in row.cells:
                text_parts.append(cell.text)
    return "\n".join(text_parts)

2. 全局匹配目标金额

用正则表达式对拼好的长文本做全局扫描,不需要管Amount:出现在什么位置,正则会自动找出所有符合规则的片段:

  • 匹配规则兼容Amount:后面可能出现的空格、千分位逗号、小数位,避免因为格式小差异漏匹配
  • 提取到结果后可以直接转成数值类型方便后续统计

对应参考代码:

import re

def match_amounts(full_text):
    # 规则说明:匹配Amount:后0到多个空格,再匹配带千分位、可选小数位的数字
    match_pattern = r"Amount:\s*([\d,]+\.?\d*)"
    raw_results = re.findall(match_pattern, full_text)
    # 去掉千分位逗号,转成浮点型数值
    final_amounts = [float(item.replace(",", "")) for item in raw_results]
    return final_amounts

3. 批量处理多文档

写个循环遍历所有待处理的Word文件路径,逐个调用上面两个函数即可,遇到损坏、打不开的文件单独记日志,不要中断整个批量任务。

踩坑提醒:如果测试时发现有金额漏提取,先检查对应金额是不是在文本框、页眉页脚、嵌入对象里,这类内容python-docx默认不会扫到,需要额外解析对应XML节点才能拿到,普通业务场景下段落+表格的提取覆盖率能到95%以上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 23:42:27