如何拆分字符串数组并提取4列数据(保持列顺序)
我遇到过类似的PDF表格解析问题,尤其是这类有固定格式的法律文书,依赖字符索引的方法确实容易因为排版空格不稳定而失效。这里给你一个基于正则匹配的解决方案,利用文书里的固定术语模式(比如MS/MR指代人员、特定身份术语)来拆分出4列矩阵:
解决方案思路
这类法律表格的内容有明显的模式特征:
- 列1通常是案件标识、主体名称或关系词(比如
WP(PIL)/7/2013、Vs、AND ORS.) - 列2通常以
MS/MR.开头,指代具体人员 - 列3是身份/角色术语(比如
ADVOCATE、ASST. GOVT.、CENTRAL GOVT.) - 列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
相关产品推荐
相关产品推荐

