为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

一只名叫tom的猫 2021-03-28 12:19:10
我正在尝试使用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)


查看完整回答
反对 回复 2021-04-06
  • 1 回答
  • 0 关注
  • 163 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信