Python提取那加兰邦选民PDF数据转Excel:正则匹配NaN问题求助
修复PyPDF2提取那加兰邦选民名册时的正则匹配NaN问题
核心原因
PDF提取的选民文本存在排版混乱(条目内换行、分隔符前后空格不一致、字段跨行),原正则未适配这些非标准化格式,导致匹配失败出现NaN。
适配排版的正则方案
针对印度选举委员会PDF的常见格式,使用兼容换行、可变空格的正则:
import re import pandas as pd from PyPDF2 import PdfReader # 匹配选民条目的正则(兼容换行、任意空格) voter_regex = re.compile( r'(\d{4})\s+' # 选民编号(固定4位) r'([^\n/]+?)\s*/\s+' # 姓名(匹配到第一个/前的内容,忽略前后空格) r'([^\n/]+?)\s*/\s+' # 性别 r'(\d{1,3})\s*/\s+' # 年龄 r'EPIC:\s*([A-Z0-9]+)\s*/\s+' # EPIC号(忽略EPIC:后的空格) r'([\s\S]+?)(?=\n\d{4}|\Z)', # 住址(匹配到下一个选民编号或文本末尾) re.MULTILINE ) # 读取并处理PDF reader = PdfReader("nagaland_voter_roll.pdf") raw_text = "\n".join([page.extract_text() for page in reader.pages]) # 提取所有匹配条目 voter_entries = voter_regex.findall(raw_text) # 生成Excel df = pd.DataFrame( voter_entries, columns=["选民编号", "姓名", "性别", "年龄", "EPIC编号", "住址"] ) df.to_excel("nagaland_voters_clean.xlsx", index=False)
调试技巧
- 打印
raw_text的前2000字符,确认实际提取的文本格式是否与正则假设一致 - 使用
re.finditer(raw_text)遍历匹配结果,查看未匹配的文本块,针对性调整正则分组 - 若存在姓名带特殊字符、住址跨行的极端情况,可添加预处理步骤合并跨行字段
内容的提问来源于stack exchange,提问作者Tony
相关产品推荐
相关产品推荐

