【问题标题】:searching for last group of text between specific characters在特定字符之间搜索最后一组文本
【发布时间】:2020-06-05 21:23:04
【问题描述】:

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

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

基本上是包围在 --- 到 --- 行周围的文本行。

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

【问题讨论】:

  • 您可以尝试.*(?<=---)(.*?)(?=---) 仅获取最后一个匹配项regex101
  • 非常感谢!我一直在为这个问题挠头,谢谢!
  • 请注意,@Andrej 设置了单行模式标志,以便 .* 匹配换行符。很好的答案,安德烈。

标签: python-3.x regex regex-lookarounds


【解决方案1】:

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

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

第一个.* 是贪婪的,它吞噬了包括换行符和连字符在内的字符,直到它消耗了'---' 行,在字符串的后面又是一行'---'。它不能超过倒数第二行'---',因为它必须消耗最后一行'---',但匹配必须跟在最后一行'---' 之后。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-16
    • 2021-01-06
    • 2019-11-21
    • 2019-07-12
    • 2013-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多