gpt4 book ai didi

python RE : Non greedy matches,重复和分组

转载 作者:行者123 更新时间:2023-11-28 16:42:38 25 4
gpt4 key购买 nike

我正在尝试使用 python RE 匹配重复的线条模式

输入字符串:

开始行:x
第 1 行
第 2 行
start_of_line: y
第 1 行
第 2 行
第 3 行
start_of_line: z
第 1 行

基本上我想在循环中提取字符串(每个字符串从 start_of_line 开始直到下一个 start_of_line 之前的所有字符)

我可以使用 for 循环轻松解决这个问题,但想知道是否有 python RE 可以做到这一点,尽了我最大的努力,但在分组部分遇到了困难。

对我来说最接近解决方案的是

pattern= re.compile(r"start_of_line:.*?", re.DOTALL)
for match in re.findall(pattern, input_string):
print "Match =", match

但是它打印

Match = start_of_line:
Match = start_of_line:
Match = start_of_line:

如果我对分组做任何其他事情,我就会输掉比赛。

最佳答案

要使用正则表达式执行此操作,您必须使用先行测试:

r"start_of_line:.*?(?=start_of_line|$)"

否则,由于您使用惰性量词 (*?),您将获得可能的最短匹配,即 start_of_line:

之后没有任何内容

另一种方式:

r"start_of_line:(?:[^\n]+|\n(?!start_of_line:))*"

在这里,我使用了一个字符类,其中包含除换行符 (\n) 之外的所有内容,重复一次或多次。当正则表达式引擎找到换行符时,它会测试 start_of_line: 是否跟不上。我重复该组零次或多次。

这种模式比第一种模式更有效,因为仅当遇到换行符时才执行前瞻(相对于每个字符)

关于python RE : Non greedy matches,重复和分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17330470/

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