如何编写正则表达式提取PDF中Forma de pago后的60 días F.F内容
Java正则提取PDF指定字段解决方案
问题原因
你之前使用的正则\W*(Forma de pago):(\s)\W*仅能匹配到「Forma de pago」字段本身和前后的少量空白/非单词字符,没有设置终止匹配边界,也没有捕获后续目标内容,因此无法完成需求。
可行实现方案
正则规则设计
我们采用非贪婪匹配实现指定区间内容提取,Java中转义后的正则为:Forma de pago:\\s*(.*?)\\s*60 días F\\.F
\\s*适配字段前后可能存在的任意数量空白、换行符- 非贪婪匹配
.*?保证只匹配到第一个「60 días F.F」就终止,不会多匹配后续内容 - 终止符中的
.做了转义处理,避免被识别为正则通配符
完整代码实现
import java.util.regex.Matcher; import java.util.regex.Pattern; public class ExtractPaymentInfo { public static void main(String[] args) { // 替换为实际从PDF中提取的完整文本 String pdfExtractedText = "此处填入你从PDF提取的全部文本内容"; // 编译正则,开启DOTALL模式支持跨行匹配,若确认内容无换行可移除该参数 Pattern pattern = Pattern.compile("Forma de pago:\\s*(.*?)\\s*60 días F\\.F", Pattern.DOTALL); Matcher matcher = pattern.matcher(pdfExtractedText); if (matcher.find()) { // 提取两个字段之间的内容 String targetContent = matcher.group(1); // 按空白/换行拆分得到3个目标元素 String[] threeElements = targetContent.split("\\s+"); // 输出验证 for (String element : threeElements) { System.out.println("提取到的元素:" + element); } } } }
适配特殊场景的优化
- 若提取的文本中「60 días F.F」存在空格波动(比如多空格、点前后有空格),可以将终止符部分的正则修改为
60\\s*días\\s*F\\s*\\.\\s*F适配格式差异 - 若存在大小写不一致的情况,编译正则时新增
Pattern.CASE_INSENSITIVE参数即可
内容的提问来源于stack exchange,提问作者Shibaji Sanyal
相关产品推荐
相关产品推荐

