python RE:非贪婪匹配,重新排列和分组

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


输入字符串:


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

如果我进行其他任何分组操作,都将输掉比赛。


一只名叫tom的猫
浏览 164回答 1
1回答

梦里花落0921

要使用正则表达式执行此操作,必须使用先行测试:r"start_of_line:.*?(?=start_of_line|$)"否则,由于您使用的是惰性量词(*?),因此您将获得尽可能短的匹配,即之后没有任何匹配start_of_line:其它的办法:r"start_of_line:(?:[^\n]+|\n(?!start_of_line:))*"在这里,我使用一个字符类,其中包含除换行符(\n)之外的所有字符,该字符类重复了一次或多次。当正则表达式引擎找到换行符时,它会测试是否start_of_line:不跟随换行符。我将群组重复零次或多次。该模式比第一种模式更有效,因为仅当遇到换行符时才执行前瞻(每个字符均使用vs)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python