在多行正则表达式模式之后解析文本行

Parse line of text after multiline regex pattern

我正在尝试解析通过 pdfbox 转换为 txt 的 pdf 文件中的字段。这是我需要提取的字段示例 "BUYER NAME AND ADDRESS:"。这些文档通常包含翻译,并且“:”冒号出现在 BUYER NAME AND ADDRESS 之后的可变字符数。示例如下。

文本文件..
买家姓名和地址/编号 Y
DIRECCIÓN DEL COMPRADOR:
此处为买家姓名
文本继续..

这是我尝试的图案/扫码。

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:但如果有其他字符或行 returns,则失败。我该如何修复模式?

给定的正则表达式 "BUYER NAME AND ADDRESS.*:" 匹配 "BUYER NAME AND ADDRESS" 后跟任意数量的字符后跟一个冒号,所以这将匹配直到最后一个冒号的所有内容,因为正则表达式是贪婪的,你可以使用 .*?(非贪婪)以获得所需的行为。此外,您需要将 MULTILINE(^$ 匹配行的开头和结尾)更改为 DOTALL(. 也匹配换行符)以使此工作如@stribizhev 所说。

这也可以使用[^:]来纠正,[^...]表示不是那些字符。像这样你不需要任何修饰符(我在最后删除了 : 因为如果你这样做你可能不需要它):

"BUYER NAME AND ADDRESS[^:]*"