2016-06-30 7 views
0

Ich muss einen Benutzernamen aus dem Protokoll unten über Regex für einen Protokollkollektor extrahieren.Extrahieren Sie den Benutzernamen aus Schrägstrich getrennten Text

Aufgrund der Art der Protokolle ist es nicht möglich, genau zu definieren, wie viele Vorwärts Schrägstriche verfügbar sein werden, und ich muss ein bestimmtes Stück Daten auswählen, da es mehrere Vorkommen von ähnlich formatierten Daten gibt .

Erforderliche Daten:

name="performedby" label="Performed By" value="blah.com/blah/blah blah/blah/**USERNAME**"| 

< 46> 23. Juni 10.38.49 10.51.200.76 25113 LOGbinder EX | 3.1 | Erfolg | 2016-06-23T10: 38: 49,0000000-05: 00 | hinzufügen -MailboxPermission Exchange-Cmdlet wurde ausgegeben | name = "aufgetreten" label = "Occurred" value = "23.06.2016 10:38:49 AM" | name = "cmdlet" label = "Cmdlet" value = "Add-MailboxPermission" | name = "permittedby" label = "Durchgeführt von" value = "blah.com/blah/blah blah/blah/BENUTZERNAME" | name = "succeeded" label = "Erfolgreich" value = "Yes" | name = "error "label =" Fehler "value =" None "| Name =" successingserver label = "Ursprünglicher Server" value = "schwarz" | name = "objectmodified" label = "Objekt geändert" value = "blah/bl ah/USERNAME "| name =" Parameter "label =" Parameter "value =" Name: Identität, Wert: [blah] Name: Benutzer, Wert: [blah/blah] Name AccessRights, Wert: [FullAccess] Name: InheritanceType, Wert: [All] "| name =" Eigenschaften "label =" Geänderte Eigenschaften "value =" n/a "| Name =" Zusatzinfo "label =" Zusatzinformation "

Ich habe ein paar verschiedene Regex-Befehle ausprobiert aber ich bin nicht in der Lage, die notwendigen Informationen zu extrahieren, ohne genau anzugeben, wie viele/werden.

blah\.com[.*\/](.*?)"\|name 
+0

* a * Benutzername getestet übereinstimmen - nur ein? Was bedeutet ein Benutzername? Sind die letzten Wörter in "value" mit den forward slashes usernames? – ClasG

+0

Benutzername ist in der Regel ein voller Name, d. H. "John Smith" usw. – Jordurh

+0

Überprüfen Sie meine aktualisierte Antwort –

Antwort

1

Try this:

blah\.com.*\/(.*?)"\| 

prüfen here

Wenn Ihr Benutzername Format ist dies:

value="abc.xyz/something/something/..../USERNAME" 

verwenden dann diese:

\..*\/(.*?)" 

Check here

0

Mögliche Lösung: value="[a-z\.\/]*\/(.*)"

(Die erste Capture-Gruppe ist der Benutzername)

Arbeitsbeispiel: https://regex101.com/r/qZ0zC8/2

+0

Dies entspricht auch anderen Zeichenfolgen und es ist nicht klar, ob der erste "Wert" Benutzername sein wird. –

+0

Verwenden Sie die erste Erfassungsgruppe. Bei dieser Lösung wird der Domänenname nicht angegeben, sodass Sie den Benutzernamen aus mehreren Domänen extrahieren können. – Yaron

+0

Ich habe eine andere mögliche Lösung hinzugefügt, wenn der Benutzername weniger als 2 Zeichen lang ist, wird es nicht erfassen: https://regex101.com/r/qZ0zC8/3 – Yaron

0

Mayby so?

blah.(\w+\/)+\K([\w]+) 

Es ist Benutzername fangen, aber da es zwischen ist ** so sie ich

auch in Notepad ++

+0

Hallo das ** ist nur fett hier, um den Benutzernamen hervorzuheben (nicht meine Zugabe, sondern der Texteditor. Original ist: <46> Jun 23 10:38:49 10.51.200.76 25113 LOGbinder EX | 3.1 | Erfolg | 2016-06-23T10 : 38: 49.0000000-05: 00 | Add-MailboxPermission Exchange-Cmdlet wurde ausgegeben | name = "aufgetreten" label = "Occurred" value = "6/23/2016 10:38:49 AM" | name = "cmdlet" label = " Cmdlet "Wert =" Add-MailboxPermission "| name =" performedby "label =" Wird ausgeführt von "value =" blah.com/blah/blah blah/blah/BENUTZERNAME "| name =" succeed "label =" Erfolgreich "value = "Ja" | Name = "Fehler" Label = "Fehler" Wert = "Keine" | Name = "Ursprungsserver Label =" Ursprungsserver " – Jordurh

+0

Bearbeiten wurde in der Regex oben gemacht. –

Verwandte Themen