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

2024-06-16 02:59:28 发布

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

一段时间以来,我一直在努力使用python正则表达式来匹配文本中的段落,但一直没有成功。我需要获得段落的开始和结束位置

文本示例:

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开头的段落。另外两个词是一样的

使用拆分是一种方法,您可以使用正则表达式这样做:

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

相关问题 更多 >