我正在尝试解析通过 pdfbox 转换为 txt 的 pdf 文件中的字段。这是我需要提取的字段的示例,“买家姓名和地址:”。这些文档通常包含翻译,并且“:”冒号在“买方名称和地址”之后出现不同数量的字符。下面的例子。
文本文件..
买家姓名和地址/姓名
买办总监:
此处为买家姓名
文本继续..
这是我尝试的模式/扫描代码。
Scanner sc = new Scanner(txtFile);
Pattern p = Pattern.compile("BUYER NAME AND ADDRESS.*:", Pattern.MULTILINE);
sc.findWithinHorizon(p, 0);
String buyer = sc.nextLine();
buyer = sc.nextLine();
System.out.println("Buyer Name: "+buyer);
当文本文件仅是英文时,这才有效,例如BUYER NAME AND ADDRESS:但如果有额外的字符或换行,则失败。如何修复该模式?
最佳答案
给定的正则表达式 "BUYER NAME AND ADDRESS.*:"
匹配“BUYER NAME AND ADDRESS”后跟任意数量的字符,后跟冒号,因此这将匹配最后一个冒号之前的所有内容,因为正则表达式是贪婪的,您可以使用 .*?
(非贪婪)来获得所需的行为。此外,您需要将 MULTILINE (^
和 $
匹配行的开头和结尾)更改为 DOTALL(.
也匹配换行符)才能使此工作正如@stribizhev 所说。
这也可以通过使用[^:]
来纠正,[^...]
表示不是这些字符。像这样你不需要任何修饰符(我在最后删除了 :
因为如果你这样做你可能不需要它):
"BUYER NAME AND ADDRESS[^:]*"
关于java - 在多行正则表达式模式之后解析文本行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31812046/