2016-09-05 222 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