搜索特定字符之间的最后一组文本

searching for last group of text between specific characters

我有一个文本文件,其数据按以下方式打印

---
1A
1B
1C
---
---
2A
2B
2C
---
---
3A
3B
3C
.
.
3n
---
NA
.
.
Nn
---

本质上是文本行被 --- 到 --- 行包围。

我想提取最后一次出现的 --- 到 --- 之间的内容,到目前为止,我已经使用正则表达式将其缩小到 (?<=---)(.*?)(?=---) 但是这找到了所有出现的地方,我只喜欢最后一个。

如果用正则表达式匹配字符串

r'(?s).*^---\r?\n(.*)(?=^---)'

捕获组 1 将包含感兴趣的字符串。

Demo

Python 的正则表达式引擎执行以下操作。

(?s)        set single-line mode so that '.' matches newlines
.*          match 0+ characters (greedily)
^---\r?\n   match line '---'
(.*)        match 0+ characters in capture group 1
(?=^---)    match '---' at beginning of line in positive lookahead

第一个 .* 贪婪地吞噬字符,包括换行符和连字符,直到它消耗完 '---' 行,然后在字符串中再跟一行 '---'.它不能超出倒数第二行 '---',因为它要这样做就必须消耗最后的 '---' 行,但是匹配必须跟在最后的 '---' 行之后。