2016-09-05 166 views
1

末结束我有两个字符串:正则表达式的贪婪匹配字符或字符串

1)“创建的帐户拥有者分享规则测试1”

2)“更新帐户所有者共享规则TEST3:从读改变CaseAccessLevel /写入只读”

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

1)创建的帐户拥有者分享规则test1的

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

分为4组:

1)(创建)(账户)(所有者共享规则)(TEST1)

2)(更新)(账户) (所有者分配规则)(TEST3)

为了这个目的,我尝试使用下一个蟒蛇正则表达式:

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

但第二串4组看起来像“TEST3:改变CaseAcces s从读/写到只读'。

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

在此先感谢您的答案,

Dzmitry

+0

像这样:** https://regex101.com/r/sU5dD2/1**? – Jan

+1

用'?'表示一个“最小匹配”,例如'。+?'。 – cdarke

回答

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

+1

谢谢Jan!这正是我需要的! – Dzmitry

+0

@Dzmitry:很高兴帮助。 – Jan