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

regex greedy match ends with character or end of string

我有两个字符串:

1) "Created Account Owner Sharing Rule test1"

2) "Updated Account Owner Sharing Rule test3: Changed CaseAccessLevel from Read/Write to Read Only"

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

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

2) 更新了帐户所有者共享规则测试 3

分为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 组看起来像 'test3: Changed CaseAccessLevel from Read/Write to Read Only'。

基本上,正则表达式应该在行尾或“:”字符之前停止,但贪婪匹配不允许这样做。

提前感谢您的回答,

兹米特里

可以做:

^(?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(注意不同的修饰符!)。