Python 正则表达式以摘录段落

Python 正则表达式以摘录段落,python,regex,Python,Regex,我试图用Python编写一个正则表达式来提取段落的一部分 在下面的段落中,我想摘录的部分是粗体的 该提案将增加救助资金,向银行注入现金,并削减支出 希腊债务报告称 我的正则表达式和输出如下所示 >>> text = 'Proposal will boost bailout fund, inject cash into banks and cut Greek debt says reports.' >>> pattern = re.compile(r'(boos

我试图用Python编写一个正则表达式来提取段落的一部分

在下面的段落中,我想摘录的部分是粗体的

该提案将增加救助资金,向银行注入现金,并削减支出 希腊债务报告称

我的正则表达式和输出如下所示

>>> text = 'Proposal will boost bailout fund, inject cash into banks and cut Greek debt says reports.'
>>> pattern = re.compile(r'(boost bailout)+?([\s\S]*?)(debt)+?')
>>> print re.findall(pattern, text)

[('boost bailout', ' fund, inject cash into banks and cut Greek ', 'debt')]
虽然它确实提取了正确的部分,但是提取被分成一个元组中的3个部分,而不是像下面这样的一行,对吗

[('boost bailout fund, inject cash into banks and cut Greek debt')]
使用

或(你的情况):


从文件中:

如果模式中存在一个或多个组,则返回组列表;如果模式有多个组,这将是一个元组列表。空匹配将包含在结果中,除非它们触及另一个匹配的开头

--

如果您想要一个匹配项,请执行以下操作:

#!/usr/bin/env python
import re
text = 'Proposal will boost bailout fund, inject cash into banks and cut Greek debt says reports.'
pattern = re.compile(r'boost bailout[\s\S]*?debt')
print re.findall(pattern, text)

您的模式不正确:

(boost-bailout)+
表示:字符串“boost-bailout”重复多次,
这当然不是我们想要的。如果你在图案中放置几对帕伦,你将获得几个捕捉组。如果您只想提取“推进救助”和最后一个字符串“债务”之间的所有文本,则正确的模式是:

pattern = r'boost bailout.+debt'
正则表达式是

reg = re.compile(r'boost bailout.+debt',re.DOTALL)  
re.DOTALL是一个标志,使点符号匹配由换行符组成的每个字符:它替换
[\s\s]

但如果你想在“刺激救助”和首次出现“债务”之间脱身,那就必须这样做

pattern = r'boost bailout.+?debt'
另外,使用
reg.search(text).group()
代替生成一个元素列表的
reg.findall(text)

请注意,pattern
pattern=r'boost saily.+?debt'
定义为字符串对象,
reg=re.compile(pattern)
定义的reg是一个RegexObject对象


值得命名为regex的是RegexObject,值得命名模式的是字符串。

返回一个元组,因为正如您在括号中看到的那样,创建捕获组,然后可以单独检索。为了避免这种情况,您应该使用非捕获组:
(?:…)

reg = re.compile(r'boost bailout.+debt',re.DOTALL)  
pattern = r'boost bailout.+?debt'