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

如何移除通过Regex从PDF提取的指定目标字符串?

如何移除PDF提取文本中的特定冗余字符串?

嘿,我来帮你搞定这个PDF文本清理的问题!从你列出的几个要移除的字符串来看,都是PDF提取时带出来的包含Page标记、发票相关前缀的冗余块,下面是具体的解决思路和代码示例:

第一步:先梳理冗余内容的共性模式

你要清理的文本块有几个明显特征:

  • 包含Page关键字(后面可能跟着数字,也可能是空的)
  • 常和Invoice No./INVOICE :/Invoice Date:这类发票相关前缀绑定出现
  • 都是多行的文本片段

第二步:编写针对性的正则表达式

我们可以写一个正则来精准匹配这些多行冗余块,搭配re.DOTALL(让.能匹配换行符)和re.IGNORECASE(忽略大小写差异,避免大小写不一致漏匹配)两个标志:

import re

# 定义匹配冗余块的正则模式
cleanup_pattern = r'(?:Invoice No\.|INVOICE :|Invoice Date:)?\s*(?:Page\s*\d?\s*\n?)+.*?(?:\n|$)'

正则模式拆解:

  • (?:Invoice No\.|INVOICE :|Invoice Date:)?:匹配可选的发票类前缀,?:表示这是个非捕获组(不单独提取内容),?表示这个前缀是可选的
  • \s*:匹配任意数量的空白字符(包括空格、换行)
  • (?:Page\s*\d?\s*\n?)+:匹配一个或多个Page相关行,\d?允许Page后面跟着可选的数字(比如Page 1或Page ),\n?允许行尾带可选的换行
  • .*?(?:\n|$):非贪婪匹配后续的所有内容,直到遇到下一个换行或文本结尾,避免误匹配到有效内容

第三步:用正则替换完成清理

假设你从PDF提取的原始文本存在extracted_text变量里,直接用re.sub替换掉匹配到的冗余内容即可:

# 示例:原始提取的文本
extracted_text = """
Invoice No.
Page 1
WS350430
DRDR30899
这是需要保留的有效内容
INVOICE :
Invoice Date:
Page 
SI01240784
更多有效内容
Page 1
WS350430 
Invoice Date:
Page 
"""

# 执行清理
cleaned_text = re.sub(cleanup_pattern, '', extracted_text, flags=re.DOTALL | re.IGNORECASE)
print(cleaned_text)

运行后,所有你列出的冗余块都会被移除,只剩下有效内容。

灵活调整的小技巧

如果遇到特殊情况没覆盖到,你可以随时调整正则:

  • 如果有其他发票前缀(比如Invoice #),直接加到第一个非捕获组里,比如(?:Invoice No\.|INVOICE :|Invoice Date:|Invoice #)?
  • 如果Page后面的内容有固定格式,也可以细化匹配规则(比如只匹配带数字的Page \d+)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:57:01