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

如何解析每行结构不同且含无效行的TXT文件中的目标数据

非结构化固定排版TXT数据解析方法

核心思路

你提供的文本属于固定字段+固定排版的半结构化文本,不需要做复杂的NLP处理,按关键词匹配+固定位置切分就能100%准确提取所需字段。

分步操作

  • 第一步:过滤无效行
    直接跳过全为分隔符横线的行,以及不需要的无关表头行,只保留包含目标字段的行。
  • 第二步:提取数值类字段(Days、Holidays、Salary、Tax等)
    这类字段的关键词固定,直接用正则匹配关键词后跟随的数值即可,示例正则规则:

    Days匹配规则:Days\s+(\d+),提取第一分组值即可得到20
    Holidays匹配规则:Holidays\s+(\d+),提取第一分组值即可得到3
    薪资、税额类带小数的字段匹配规则:Salary\s+(\d+\.\d{2})、Tax\s+(\d+\.\d{2})

  • 第三步:提取公司、人员姓名字段
    第二行的排版固定为[公司名称] + 多空格分隔 + [姓名 中间名 姓氏],两种提取方式可选:
    1. 按固定偏移量切分:观察排版可知姓名区域从行首第20个字符左右开始,直接按字符位置切割行内容,前半段去首尾空格得公司名,后半段去首尾空格得完整姓名
    2. 按多空格分隔:用正则\s{3,}(匹配3个及以上连续空格)把第二行切成两部分,第一部分去掉开头的Company字符串得公司名,第二部分就是完整姓名

示例代码(Python)

import re

# 读取文件所有行
with open("你的文件路径.txt", "r", encoding="utf-8") as f:
    lines = f.readlines()

result = {}
for line in lines:
    line = line.strip()
    # 跳过空行和分隔线行
    if not line or line.startswith("---"):
        continue
    # 匹配数值字段
    if "Days" in line:
        result["days"] = int(re.search(r"Days\s+(\d+)", line).group(1))
    if "Holidays" in line:
        result["holidays"] = int(re.search(r"Holidays\s+(\d+)", line).group(1))
    if "Salary" in line:
        result["salary"] = float(re.search(r"Salary\s+(\d+\.\d{2})", line).group(1))
    if "Tax" in line:
        result["tax"] = float(re.search(r"Tax\s+(\d+\.\d{2})", line).group(1))
    # 匹配公司和姓名行
    if line.startswith("Company"):
        parts = re.split(r"\s{3,}", line)
        result["company"] = parts[0].replace("Company", "").strip()
        result["full_name"] = parts[1].strip()

print(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:06:02