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

时间:2015-08-04 14:29:04

标签: java regex text java.util.scanner

我正在尝试通过pdfbox解析转换为txt的pdf文件中的字段。以下是我需要提取的字段“购买者姓名和地址:”的示例。这些文档通常包含翻译,“:”冒号在购买者名称和地址后显示可变数量的字符。示例如下。

Txt文件..
买方名称和地址/ NOMBRE Y
DIRECCIÓNDELCOMPRADOR:
买家姓名在这里
Txt继续..

这是我尝试的模式/扫描代码。

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);

当文本文件仅为英文时,例如,买方姓名和地址:但如果有其他字符或换行符,则会失败。我该如何修复模式?

1 个答案:

答案 0 :(得分:1)

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

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

: