我正在使用正则表达式编写 Java 代码来解析从 PDF 文档中提取的内容页。
在字符串中,正则表达式必须匹配:一个数字(最多三个),后跟一个(或多个)空格,后跟一个单词(或多个[单词:任意字符序列])。反之亦然:(单词、空格、数字),它们都必须在字符串中。还要考虑前导空格并且不区分大小写。
提取的内容页面可能如下所示:
Directors’ responsibilities 8
Corporate governance 9
Remuneration report 10
编号样式不一致,数字和字符串之间的空格数确实不同,因此它也可能看起来像:
01 Contents
02 Strategy and highlights
04 Chairman’s statement
我使用的正则表达式匹配任意数量的单词,后跟任意数量的空格,然后是不超过 3 位的数字:
(?i)([a-z\\s])*[0-9]{1,3}(?i)
它可以工作,但不太好,不知道我做错了什么?我希望有一种方法可以检测两种编号样式(将页码放在字符串的左侧或右侧),而不是重复正则表达式并翻转顺序。
干杯
最佳答案
如果您想匹配短语,您应该在正则表达式中包含您想要匹配的任何标点符号。 AFAIK 正则表达式中无法判断某个短语是“之前还是之后”,因此您应该翻转一个短语并在其后附加 |
。大致如下:
[a-zA-Z'".,!\s]+\d{1,3}|\d{1,3}[a-zA-Z'".,!\s] +
此外,您不需要两个 (?i)
实例,因为正则表达式将应用不区分大小写,直到字符串末尾或遇到 (?-我)
。
关于java - 使用正则表达式解析内容页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17977340/