python-3.x - 搜索特定字符之间的最后一组文本

标签 python-3.x regex regex-lookarounds

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

---
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

第一个 .* 贪婪,会吞噬字符,包括换行符和连字符,直到它消耗掉后面的行 '---'字符串再多一行 '---'。它不能超出倒数第二行 '---' 因为如果这样做,它必须消耗最后一个 '---' 行,但匹配后面必须跟最后一个 '---' 行。

关于python-3.x - 搜索特定字符之间的最后一组文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62224295/

相关文章:

regex - NodeJS + Express 3 - Route 中的斜线然后固定操作

javascript - 尝试在正则表达式中使用换行符导致我的 javascript 代码出现 "new line"

javascript - 正则表达式查找组不起作用

java - 生成一个 Java 可用的正则表达式,在精确位置否定单词

python - Python 中列表理解的错误处理

python - 根据来自 QComboBox 的用户输入添加和删除动态生成的 QLineEdit 小部件

python - Python 中的静态数组

python-3.x - 为多个对象创建 TFrecord 文件

r - 字符串是相同的(使用 `base::identical`),但与 `grepl`/ `gsub`的行为不同

regex - 正则表达式负向前瞻