如何使用正则表达式匹配段落

新手上路,请多包涵

我一直在努力使用 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 开头的段落(没有空行)。有谁知道如何做到这一点?

原文由 chtenb 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

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

 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

原文由 RichieHindle 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

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

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

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

原文由 justhalf 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题