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

如何从TXT解析特定文本块生成格式正确的Excel表格?

解决方案

1. 正则匹配逻辑重构

要解决文本块提取、ITEMNAME纳入、多行Description处理的问题,核心是先匹配完整的文本块,再在块内提取键值对:

块匹配正则

用于捕获以ITEMNAME开头、直到空白行或下一个块结束的完整内容:

block_pattern = re.compile(
    r'^(?P<ITEMNAME>.+?)\n'
    r'(?P<content>(?:.+\n)+?)'
    r'(?=\n|^ITEMNAME|\Z)',
    re.MULTILINE | re.DOTALL
)
  • ^(?P<ITEMNAME>.+?)\n:捕获开头的ITEMNAME行,作为单独分组
  • (?P<content>(?:.+\n)+?):捕获块内剩余所有内容(非贪婪模式)
  • (?=\n|^ITEMNAME|\Z):匹配终止条件——空白行、下一个ITEMNAME开头或文本结尾

键值对匹配正则

用于处理块内的键值对,支持多行Description:

kv_pattern = re.compile(
    r'(?P<key>\w+):\s*(?P<value>(?:(?!^\w+:|\n\n).)+)',
    re.MULTILINE | re.DOTALL
)
  • (?P<key>\w+)::捕获键名(字母数字下划线组成)
  • (?P<value>(?:(?!^\w+:|\n\n).)+):捕获值,直到遇到新的键(^\w+:)或空白行(\n\n),包含多行内容

2. 完整代码实现

基于pandas和re库的完整处理代码:

import re
import pandas as pd

def extract_items_to_excel(txt_file_path):
    # 读取文本文件
    with open(txt_file_path, 'r', encoding='utf-8') as f:
        full_text = f.read()
    
    # 提取所有目标文本块
    all_blocks = block_pattern.finditer(full_text)
    items_data = []
    
    for block in all_blocks:
        # 提取ITEMNAME
        current_item = {'ITEMNAME': block.group('ITEMNAME').strip()}
        # 提取块内键值对
        kv_matches = kv_pattern.finditer(block.group('content'))
        
        for match in kv_matches:
            key = match.group('key').strip()
            # 把多行值换成空格分隔,避免Excel单元格内换行混乱
            value = match.group('value').strip().replace('\n', ' ')
            current_item[key] = value
        
        items_data.append(current_item)
    
    # 生成Excel文件
    df = pd.DataFrame(items_data)
    df.to_excel('extracted_items.xlsx', index=False)
    print('提取完成,已生成extracted_items.xlsx')

# 替换为你的TXT文件路径
extract_items_to_excel('source_data.txt')

3. 问题对应解决点

  • 每个块对应一行Excel:先按块提取,每个块生成一个字典,最终列表转DataFrame时自然一行对应一个块
  • ITEMNAME纳入字典:从块的开头直接捕获ITEMNAME,作为字典的第一个键值对
  • 多行Description处理:键值对正则通过负向预查,确保值部分包含所有连续行,直到新键或空白行出现

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 13:35:20