提取段落的正则表达式

1 投票
4 回答
3266 浏览
提问于 2025-04-17 03:11

我正在尝试在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

根据文档的说明:

如果在模式中有一个或多个分组,返回的结果将是一个分组的列表;如果模式中有多个分组,这个列表会包含多个元组。空匹配也会包含在结果中,除非它们和另一个匹配的开始部分重叠。

-- http://docs.python.org/library/re.html

如果你只想要一个匹配,可以这样做:

#!/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)

撰写回答