正则表达式贪婪匹配以字符或字符串结尾结尾
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(注意不同的修饰符!)。
我有两个字符串:
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(注意不同的修饰符!)。