我正在尝试使用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:如果我进行其他任何分组操作,都将输掉比赛。
1 回答
梦里花落0921
TA贡献1772条经验 获得超6个赞
要使用正则表达式执行此操作,必须使用先行测试:
r"start_of_line:.*?(?=start_of_line|$)"
否则,由于您使用的是惰性量词(*?
),因此您将获得尽可能短的匹配,即之后没有任何匹配start_of_line:
其它的办法:
r"start_of_line:(?:[^\n]+|\n(?!start_of_line:))*"
在这里,我使用一个字符类,其中包含除换行符(\n
)之外的所有字符,该字符类重复了一次或多次。当正则表达式引擎找到换行符时,它会测试是否start_of_line:
不跟随换行符。我将群组重复零次或多次。
该模式比第一种模式更有效,因为仅当遇到换行符时才执行前瞻(每个字符均使用vs)
添加回答
举报
0/150
提交
取消