Python re.finditer匹配PDF文本无法输出目标匹配行问题求解
问题根因
re.finditer返回值是迭代器对象,直接打印只会输出对象内存地址,属于正常表现。遍历迭代器拿到的是正则匹配对象,直接打印匹配对象不会输出匹配到的文本内容,必须调用匹配对象的.group()方法才能获取实际匹配结果。- 正则未开启多行匹配模式:默认配置下,正则语法中的
^和$只会匹配整个文本串的开头和结尾,不会按换行符识别单行边界,因此无法逐行匹配目标内容。 - 原正则规则存在冗余和逻辑问题:手动枚举
Bank|bank|BANK三种大小写形式没有必要,可通过正则忽略大小写标记简化;同时.*后强制要求存在一个空格,会漏匹配Bank出现在行首、或Bank前无空格的场景,不符合匹配需求。
修正代码
import re # text为PyPDF2/tika提取得到的PDF文本内容 text = """Intermediary Bank (USD): censored, New York, USA; SWIFT: censored Intermediary Bank (EUR): censored, Frankfurt, Germany; SWIFT: censored """ # 开启多行模式(逐行匹配边界)+ 忽略大小写,匹配所有包含bank关键词的整行内容 bank_pattern = r'^.*bank.*$' bank_iter = re.finditer(bank_pattern, text, flags=re.MULTILINE | re.IGNORECASE) print('Here should be the bank name:') for match in bank_iter: # 取出匹配到的实际文本 print(match.group())
运行结果
Here should be the bank name: Intermediary Bank (USD): censored, Intermediary Bank (EUR): censored,
额外注意
如果PDF提取出的文本存在换行符混乱、多余不可见空白字符的情况,可以先对text做预处理,比如统一将\r\n替换为\n、去除多余空白后再执行正则匹配,避免格式问题导致匹配失败。
内容的提问来源于stack exchange,提问作者user17740942
相关产品推荐
相关产品推荐

