提取段落的正则表达式
我正在尝试在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')]
虽然它确实提取了正确的部分,但提取的结果是分成了三个部分的元组,而不是像下面这样只是一行,是否这样做是正确的呢?
[('boost bailout fund, inject cash into banks and cut Greek debt')]
相关问题:
4 个回答
0
你会得到一个元组,这是因为在Python的re模块文档中提到,括号会创建捕获组,这样你就可以单独获取这些组的内容。如果你不想这样,可以使用一个不捕获的组:(?: ... )。
1
使用
re.search(reg, text).group(0)
或者(在你的情况下):
pattern.search(text).group(0)
1
根据文档的说明:
如果在模式中有一个或多个分组,返回的结果将是一个分组的列表;如果模式中有多个分组,这个列表会包含多个元组。空匹配也会包含在结果中,除非它们和另一个匹配的开始部分重叠。
如果你只想要一个匹配,可以这样做:
#!/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)