正则表达式贪婪匹配以字符串或字符串结尾结束

时间:2016-09-05 11:35:31

标签: python regex regex-greedy

我有两个字符串:

1)"创建帐户所有者共享规则test1"

2)"更新了帐户所有者共享规则test3:将CaseAccessLevel从读/写更改为只读"

作为正则表达式匹配的结果,我希望看到:

1)创建了帐户所有者共享规则test1

2)更新了帐户所有者共享规则test3

分为4组:

1)(已创建)(帐户)(所有者共享规则)(test1)

2)(更新)(账户)(业主分享规则)(test3)

出于这个目的,我尝试使用下一个python正则表达式:

'^(?P<action>^[^\s]+)\s(?P<target_object_label>.+)\s(?P<object_type>Owner\sSharing\sRule)\s(?P<object_label>.+)(?=:|$)

但是对于第二个字符串,第4组看起来像&#39; test3:将CaseAccessLevel从读/写更改为只读&#39;。

基本上正则表达式应该在行尾或之前停止:&#39;性格但贪婪的比赛不允许这样做。

提前感谢您的答案,

Dzmitry

1 个答案:

答案 0 :(得分:0)

可以 执行:

^(?P<action>\S+)\ 
(?P<target_object_label>.+)\s
(?P<object_type>Owner\ Sharing\ Rule)\s
(?P<object_label>[^:\n]+)               # stop before : or newline

请参阅a demo on regex101.com(请注意不同的修饰符!)。