如何使用regex匹配段落

2024-06-16 12:35:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python regex中挣扎了一段时间,试图在文本中匹配段落,但没有成功。我需要得到段落的开始和结束位置。

文本示例:

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At
vero eos et accusam et justo duo dolores et ea rebum. 

Stet clita kasd gubergren,
no sea takimata sanctus est Lorem ipsum dolor sit amet.

Ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At
vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,
no sea takimata sanctus est Lorem ipsum dolor sit amet.

在本例中,我希望分别匹配以Lorem、Stet和Ipsum开头的所有段落(没有空行)。有人知道怎么做吗?


Tags: 文本sedet段落ipsumloremdoloramet
3条回答

换行符是什么?假设换行符是'\r\n',如果要匹配以Lorem开头的段落,可以这样做:

pattern = re.compile('\r\nLorem.*\r\n')
str = '...'    # your source text
matchlist = re.findall(pattern, str)

匹配列表将包含以Lorem开头的所有段落。另外两个词是一样的。

使用split是一种方法,使用正则表达式也可以这样做:

paragraphs = re.search('(.+?\n\n|.+?$)',TEXT,re.DOTALL)

.+?是一个延迟匹配,它将匹配使整个正则表达式匹配的最短子字符串。否则,它将只匹配整个字符串。

所以基本上这里我们要找到一个字符序列(.+?),它以空行(\n\n)或字符串结尾($)结束。 标记re.DOTALL使点也匹配换行符(我们还希望匹配由三行组成的段落,其中没有空行)

您可以像这样在双换行符上拆分:

paragraphs = re.split(r"\n\n", DATA)

编辑:若要将段落捕获为匹配的段落,以便可以获取它们的起点和终点,请执行以下操作:

for match in re.finditer(r'(?s)((?:[^\n][\n]?)+)', DATA):
   print match.start(), match.end()

# Prints:
# 0 214
# 215 298
# 299 589

相关问题 更多 >