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

多规则分割文本的Python正则表达式实现求助

文本分割解决方案

针对你需要处理的350万行格式文本,这里提供两种可行的分割方案,均无需硬编码特定文本:

方案一:纯正则表达式(高效适合大数据量)

通过两次正则匹配分别提取开头的非键值对部分和所有键值对,再按需求拼接结果:

import re

def split_text_line(input_line):
    # 提取开头的非键值对内容(直到第一个 KEY="VALUE" 结构前)
    start_match = re.match(r'^(.*?)(?=\s+\w+=|$)', input_line)
    result = []
    if start_match:
        start_part = start_match.group(1).strip()
        if start_part:
            result.append(start_part)
    
    # 匹配所有 KEY="VALUE" 格式的键值对
    kv_pairs = re.findall(r'(\w+)="(.*?)"', input_line)
    for key, value in kv_pairs:
        result.append(key)
        # 仅当值非空时添加,空值则只保留键
        if value:
            result.append(value)
    
    return ', '.join(result)

测试示例

  1. 输入:
EXAMPLE_FILE_TEXT ID="20211111.111111 11111"

输出:

EXAMPLE_FILE_TEXT, ID, 20211111.111111 11111
  1. 输入:
EXAMPLE_TEXT TAG="AB-123-ABCD_$B" ABCDE_ABCD="ABCD_A" ABCDEF_ABCDE="ABCDEF_ABCDEF_$A" ABCDEFGH=""

输出:

EXAMPLE_TEXT, TAG, AB-123-ABCD_$B, ABCDE_ABCD, ABCD_A, ABCDEF_ABCDE, ABCDEF_ABCDEF_$A, ABCDEFGH

方案二:结合shlex.split与正则(兼容复杂引号场景)

利用shlex.split处理带空格的引号内容,再通过正则拆分键值对:

import shlex
import re

def split_text_line(input_line):
    # 用shlex拆分,保留引号内的完整内容
    parts = shlex.split(input_line)
    result = []
    
    for part in parts:
        # 匹配 KEY="VALUE" 或 KEY=VALUE 格式
        kv_match = re.match(r'(\w+)=["]?(.*?)["]?$', part)
        if kv_match:
            key = kv_match.group(1)
            value = kv_match.group(2)
            result.append(key)
            if value:
                result.append(value)
        else:
            # 非键值对内容直接添加
            result.append(part)
    
    return ', '.join(result)

适用场景

如果你的文本中存在转义引号(如KEY="He said \"Hi\""),shlex.split会正确解析引号内的转义内容,比纯正则更可靠。

注意事项

  • 若键包含-等非\w字符,可将正则中的\w+替换为[\w-]+(根据实际键格式调整)
  • 两种方案均无需硬编码特定键名,可适配所有符合KEY="VALUE"格式的文本行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 06:06:03