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

标签 java regex text java.util.scanner

我正在尝试解析通过 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/

相关文章:

JavaScript RegExp 密码验证不起作用

java - .NET 等效或替代 Java 的 GlyphVector?

Python搜索大列表速度

text - 从文本生成问题 (NLP)

java - 这可以用java中的图像来做吗?

java - 在 USB 主机模式下将数据从 android 发送到连接的 USB 存储设备

java - 在 Java 中,当我使用代理时,网站如何找到我的真实 IP 地址?

java - 错误 com JSONP e Jersey 2.4.1

regex - 将匹配的值传递给函数,并替换为返回值

php - 如何在php中替换两个字符串之间的特定字符串