使用bs4提取使用文本的部分,不使用标记



对于一项任务,我有一份财务报告,除了表之外,没有标签。我需要从某一部分摘录文本。对于例如一个部分的标题是";管理层的讨论和分析";。页面开头的唯一标记是<page>,它结束于文档的末尾,而不是实际页面。我如何提取整个";管理层的讨论和分析";仅使用字符串标题的部分。它内部有多个部分,并且没有标记来知道它的结束位置。只是一个索引和文本/标题,其他部分开始。。。.只是简单介绍一下页面的布局:

<page>
MANAGEMENTS DISCUSSION AND ANALYSIS
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum nec augue dolor. Aliquam erat volutpat. 
Aliquam vel leo venenatis, commodo nisi in, lacinia ligula. Fusce non placerat quam, ac viverra diam. Suspendisse potenti. 
Vestibulum sit amet bibendum ipsum. Vivamus placerat feugiat justo, vel rhoncus enim sagittis non. Integer id iaculis lorem. 
OVERVIEW
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum nec augue dolor. Aliquam erat volutpat. 
Aliquam vel leo venenatis, commodo nisi in, lacinia ligula. Fusce non placerat quam, ac viverra diam. Suspendisse potenti. 
Vestibulum sit amet bibendum ipsum. Vivamus placerat feugiat justo, vel rhoncus enim sagittis non. Integer id iaculis lorem. 
<page>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum nec augue dolor. Aliquam erat volutpat. 
Aliquam vel leo venenatis, commodo nisi in, lacinia ligula. Fusce non placerat quam, ac viverra diam. Suspendisse potenti. 
Vestibulum sit amet bibendum ipsum. Vivamus placerat feugiat justo, vel rhoncus enim sagittis non. Integer id iaculis lorem. 
FOREIGN AFFAIRS:
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum nec augue dolor. Aliquam erat volutpat. 
Aliquam vel leo venenatis, commodo nisi in, lacinia ligula. Fusce non placerat quam, ac viverra diam. Suspendisse potenti. 
Vestibulum sit amet bibendum ipsum. Vivamus placerat feugiat justo, vel rhoncus enim sagittis non. Integer id iaculis lorem. 

我想从";管理层的讨论和分析";至";外交事务";。

在这种情况下,我想您对bs4无能为力。您必须使用regex来匹配一个完全大写的行,然后取该完全大写行和一个空行之间的子字符串。

此代码返回全部大写的行。

import re
rx = re.compile(r"^([A-Z ':]+$)", re.M)
UPPERCASE = [line for line in string.split("n") if rx.match(line)]
print(UPPERCASE)

其中string是测试字符串。