【发布时间】:2016-04-23 18:14:44
【问题描述】:
我正在尝试解析包含标题和子标题列表的文档,然后是正文。该文件看起来像这样:
标题一:标题一中的一些文本。
标题二:标题二中的一些文本。内有更多的文本行 标题二。
- 标题 2 内的子标题:副标题 2 内的一些文本。
我正在尝试提取所有标题(但不是子标题)的列表。从上面的示例中可以看出,所有标题都由全部大写字母后跟冒号组成。子标题以数字、句点、两个空格开头,然后是大写字母,后跟冒号。
这是我目前拥有的,但它似乎不起作用。它选取所有三个 HEADER ONE、HEADER TWO 和 SUBHEADER INSIDE HEADER TWO 作为标题。我希望它只选择 HEADER ONE 和 HEADER TWO 作为两个标题:
import re
file = open('inputFile', 'r')
document = file.read()
match = re.findall('(?<!\d\. )([A-Z ]+:)', document)
print match
当前输出:['HEADER ONE:', 'HEADER TWO:', 'SUBHEADER INSIDE HEADER TWO:'] 期望的输出:['HEADER ONE:', 'HEADER 2:']
我尝试使用否定的lookbehind,但似乎我做错了什么。有谁知道我做错了什么以及如何获得所需的输出?
谢谢!
【问题讨论】:
-
我认为在这种情况下,逐行处理文件并检查每一行可能会更容易。如果该行以空格开头,您就知道它不能是标题。
标签: python regex negative-lookbehind