2016-09-05 8 views
1

Ich habe zwei Strings:regex gierig Spiel endet mit Zeichen oder Ende der Zeichenkette

1) "Angelegt Kontoinhaber Teilen Regel test1"

2) „aktualisiert Kontoinhaber-Sharing-Regel test3: Geänderte CaseAccessLevel von Read/Nur schreiben“

Als Ergebnis der Regex Matching ich sehen möchte zu lesen:

1) Erstellt Kontoinhaber Teilen Regel test1

2) Besitzer Freigabe des Kontos aktualisiert Regel test3

in 4 Gruppen eingeteilt:

1) (Erstellt) (Account) (Owner-Sharing-Regel) (test1)

2) (Aktualisiert) (Account) (Gründer-Sharing-Regel) (test3)

zu diesem Zweck habe ich versucht, den nächsten python Regex verwenden:

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

aber für die zweite Saite 4. Gruppe wie ‚test3 aussieht: Changed CaseAcces sLevel von Lesen/Schreiben zu Nur Lesen '.

Im Wesentlichen Regex sollte entweder am Ende der Zeile oder vor ':' - Zeichen zu stoppen, aber gierige Übereinstimmung erlaubt dies nicht zu tun.

Vielen Dank im Voraus für die Antworten,

Dzmitry

+0

Etwas wie dieses: ** https: //regex101.com/r/sU5dD2/1**? – Jan

+1

Wenn Sie einem Quantifizierer mit einem '?' Folgen, bedeutet dies eine "minimale Übereinstimmung", zum Beispiel '. +?'. – cdarke

Antwort

0

Sie könnte tun:

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

Siehe a demo on regex101.com (die verschiedenen Modifikatoren etwas dagegen!).

+1

Danke Jan! Genau das brauche ich! – Dzmitry

+0

@Dzmitry: Froh, zu helfen. – Jan

Verwandte Themen