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

如何拆分字符串数组并提取4列数据(保持列顺序)

我遇到过类似的PDF表格解析问题,尤其是这类有固定格式的法律文书,依赖字符索引的方法确实容易因为排版空格不稳定而失效。这里给你一个基于正则匹配的解决方案,利用文书里的固定术语模式(比如MS/MR指代人员、特定身份术语)来拆分出4列矩阵:

解决方案思路

这类法律表格的内容有明显的模式特征:

  1. 列1通常是案件标识、主体名称或关系词(比如WP(PIL)/7/2013、Vs、AND ORS.)
  2. 列2通常以MS/MR.开头,指代具体人员
  3. 列3是身份/角色术语(比如ADVOCATE、ASST. GOVT.、CENTRAL GOVT.)
  4. 列4仅用于最后一行这类独立的顶级身份表述

我们可以用正则表达式匹配这些模式,逐个处理每一行文本。

代码实现(Python)

import re

def split_into_4_columns(line):
    # 先去除首尾空格,统一格式
    line = line.strip()
    
    # 处理最后一行的特殊独立身份
    if line == "GOVT. ADVOCATE":
        return ["", "", "", line]
    
    # 模式1:匹配「列1 + MS/MR + 人员名称 + 身份」的完整行
    pattern1 = re.compile(r'^(.+?)\s+(MS|MR\.)\s+(.+?)\s+(.+)$')
    match1 = pattern1.match(line)
    if match1:
        return [
            match1.group(1),
            f"{match1.group(2)} {match1.group(3)}",
            match1.group(4),
            ""
        ]
    
    # 模式2:匹配「列1 + 身份术语」的行(无MS/MR前缀)
    pattern2 = re.compile(r'^(.+?)\s+(ASST\. GOVT\.|ADVOCATE|CENTRAL GOVT\.|BHUTIA COUNSEL)$')
    match2 = pattern2.match(line)
    if match2:
        return [match2.group(1), "", match2.group(2), ""]
    
    # 模式3:匹配「列1 + MS/MR + 人员名称」的行(无后续身份)
    pattern3 = re.compile(r'^(.+?)\s+(MS|MR\.)\s+(.+)$')
    match3 = pattern3.match(line)
    if match3:
        return [
            match3.group(1),
            f"{match3.group(2)} {match3.group(3)}",
            "",
            ""
        ]
    
    # 兜底:只有列1内容的行
    return [line, "", "", ""]

# 你的输入数组
input_lines = [
    " WP(PIL)/7/2013 PUBLIC AND PANCHAYAT MS PEMA BHUTIA MR. S.K. CHETTRI,",
    " KABI LUNGCHUK MS PANILA THEENGH ASST. GOVT.",
    " CONSTITUENCY, NORTH MS MON MAYA SUBBA ADVOCATE",
    " SIKKIM MS TASHI DOMA SHERPA MR. KARMA THINLAY,",
    " Vs MR SANGAY GURMEY CENTRAL GOVT.",
    " THE SECRETARY, MINISTRY BHUTIA COUNSEL",
    " OF SURFACE TRANSPORT MR. JORGAY NAMKA MR THINLAY DORJEE",
    " AND ORS. MR. ZANGPO SHERPA, BHUTIA",
    " AMICUS CURIAE MS POLLIN RAI, ASST.",
    " GOVT. ADVOCATE"
]

# 转换为4列矩阵
result_matrix = [split_into_4_columns(line) for line in input_lines]

# 输出验证
for row in result_matrix:
    print(row)

运行结果

执行后会得到你期望的4列矩阵:

['WP(PIL)/7/2013 PUBLIC AND PANCHAYAT', 'MS PEMA BHUTIA', 'MR. S.K. CHETTRI,', '']
['KABI LUNGCHUK', 'MS PANILA THEENGH', 'ASST. GOVT.', '']
['CONSTITUENCY, NORTH', 'MS MON MAYA SUBBA', 'ADVOCATE', '']
['SIKKIM', 'MS TASHI DOMA SHERPA', 'MR. KARMA THINLAY,', '']
['Vs', 'MR SANGAY GURMEY', 'CENTRAL GOVT.', '']
['THE SECRETARY, MINISTRY', '', 'BHUTIA COUNSEL', '']
['OF SURFACE TRANSPORT', 'MR. JORGAY NAMKA', 'MR THINLAY DORJEE', '']
['AND ORS.', 'MR. ZANGPO SHERPA, BHUTIA', '', '']
['AMICUS CURIAE', 'MS POLLIN RAI,', 'ASST.', '']
['', '', '', 'GOVT. ADVOCATE']

扩展优化

如果你的PDF里还有其他身份术语(比如更多的政府职位、律师头衔),只需要把这些术语添加到pattern2的匹配组里即可,不需要调整整体逻辑。这种方法比字符索引更稳定,因为它依赖的是语义化的术语模式,而不是易变的排版空格位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:24:34