我试图找到关键字并选择关键字周围的句子。输入文本(例如)如下。为解释目的,我将关键字设为粗体:
董事会已采纳“公司治理指引”,其副本可于我们的互联网网站www.henryschein.com下载,公司信息 - 公司治理标题下。我们的公司治理指南涉及以下主题:(i)董事会的角色,(ix)管理发展和继任计划,(xiv)提交董事辞职和(xv)与董事会沟通董事。
除其他事项外,本公司的企业管治指引规定,董事会的政策是定期检讨与首席执行官的选择及表现有关的事宜。至少每年一次,首席执行官必须向董事会报告公司的管理发展计划和继任计划。此外,董事会和首席执行官应定期讨论首席执行官在首席执行官突然辞职,退休或残疾时对继任者的建议。
我使用的代码如下:
def find_sentences(text):
p = re.compile(r'[^\.]*\.[^\.]*succession-planning[^\.]*\.[^\.]*\.')
p2 = re.findall(p,text)
if len(p2)>1:
p3 = '######################################'.join(i for i in p2)
else:
p3 = p2[0]
return p3
text2 = re.sub(r'succession planning[^\s^\w+]+','succession-planning', text)
sentence=find_sentences(text2)
输出如下:
董事会已采纳“公司治理指引”,其副本可于我们的互联网网站www.henryschein.com下载,公司信息 - 公司治理标题下。我们的公司治理指南涉及以下主题:(i)董事会的角色,(ix)管理发展和继任计划,(xiv)提交董事辞职和(xv)与董事会沟通董事。
除其他事项外,本公司的企业管治指引规定,董事会的政策是定期检讨与首席执行官的选择及表现有关的事宜。
问题问题是当我打印上面的 p2
时,它只返回围绕并包括第一个继承计划的句子。它不会返回该关键字的第二次出现。除了上面的输出之外,我还需要一个代码来返回以下内容:
除其他事项外,本公司的企业管治指引规定,董事会的政策是定期检讨与首席执行官的选择及表现有关的事宜。至少每年一次,首席执行官必须向董事会报告公司的管理发展计划和继任计划。此外,董事会和首席执行官应定期讨论首席执行官在首席执行官突然辞职,退休或残疾时对继任者的建议。
当我使用p
更改 p = re.compile(r'[^\.]*succession-planning[^\.]*\.')
时,它会返回两次发生,但不包括周围的句子。我认为findall不会返回重叠的匹配。我怎样才能让他们归还?
答案 0 :(得分:1)
答案:.findall()
方法会返回所有匹配项。
.findall()
方法无法在文字上返回任何匹配项,其中不包含设计的词组 - 段(没有此类子字符串==" 继任计划")
p = re.compile(r'[^\.]*\.[^\.]*succession-planning[^\.]*\.[^\.]*\.')
是的,有几乎相似的"细分,但没有" -
"
简历:正则表达式不应该归咎于找不到根本不存在的文本片段。
第二个"继承计划" - 关键字包含(或不包含)不依赖于re.findall()
方法,但 依赖于“任务定义”要求的严格性,该要求指出" 围绕关键字"。
弱解释可能包含一个案例,关键字的右侧不是" 包围"通过任何句子延续词,但以一个停止标志终止。
强有力的解释会限制关键字两边未能包围的情况。
>>> mStrg = re.compile( r'....succession planning[^\.]+?\.[^\.]*?\.' )
>>> mWeak = re.compile( r'....succession planning[^\.]*?\.' )
>>> re.findall( mWeak, text )
[ "...", "...for management development and on succession planning."]
>>> len( re.findall( mWeak, text ) )
2