gpt4 book ai didi

python - 匹配在下一次出现第一个特定行之前没有跟随另一个特定行的特定行

转载 作者:行者123 更新时间:2023-12-01 01:29:17 25 4
gpt4 key购买 nike

我将从示例开始,因为这可能是最简单的解释。我们有一个多行文件:

...
STARTING LINE with something 83
...
STARTING LINE with other 12
...
ENDING LINE with yet another info
...
STARTING LINE with another 43
...

... 表示除 STARTING LINE .*ENDING LINE .* 之外的任何内容(多行,包括空行) .

我们必须捕获包含所有 STARTING LINE .*后跟 ENDING LINE .* 的组,这意味着第一个和第二个示例中最后一次出现 STARTING LINE .*

STARTING LINE .* 单独出现的次数以及 STARTING LINE .*...ENDING LINE .* 对的出现次数未知。

我尝试过多种带有正向和负向、前向和后向前瞻的表达式,但从未成功捕获出现的情况。

如果需要,我可以提供更多示例,但可能很难向您提供我已经尝试过的表达式,因为我没有跟踪它们,并且当前的表达式捕获了所有出现的情况,包括我们没有出现的情况想要:

  1. (^起始行.*?$)(?!^结束行)[.\n]+

  2. (^起始行.*?$(?!.*^结束行)[.\n]*)

请注意,我们希望组中仅包含 STARTING LINE .* 行。

我们使用带有 re.MULTILINE 标志 (gm) 的 Python 2.7 正则表达式引擎。还尝试使用附加的 re.DOTALL (s) 选项,但没有成功。

最佳答案

以下正则表达式适用于我的 MULTILINE 模式 ( demo ):

^STARTING LINE .+$\n(?!(?:(?!(?:STARTING|ENDING) LINE ).+\n)*ENDING LINE )

说明:

  • ^STARTING LINE .+\n:起始行(由于 \n 而不需要 $)
  • (?:(?!(?:STARTING|ENDING) LINE ).+\n)*:零个或多个中间行(^ 也不是 $ 不需要,因为 \n)
  • ENDING LINE:结束行(由于之前的 \n,因此不需要 ^)
PS。这假设您的换行确实是 \n,而不是 \r\n

关于python - 匹配在下一次出现第一个特定行之前没有跟随另一个特定行的特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53048203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com