2016-06-22 29 views
0

ich Anzahl von Gruppen aus dieser Zeichenfolge erfassen möge -Regulärer Ausdruck: Wie die optionale Gruppe erfassen

%May 11 10:03:49:448 2000 AB-CDE SHELL/6/SHELL_CMD: -Task=vt0-IPAddr=172.0.0.0-User=manager; Command is display info 
%May 11 10:03:51:122 2000 AB-CD-E SSH/6/SSH_LOGOUT: STEL user manager (IP: 172.0.0.0) logged out. 

Die Regex Ich schrieb wie folgt ist -

^%(\w{3})\s+(\d+)\s*([0-9]+\s?:\s?[0-9]+\s?:\s?[0-9]+):[0-9]+\s*(\d{4})?\s*\S*\s*(.*)/(\d+)/\S*:(.*);(.*) 

Die folgenden Gruppen caputures von der ersten Zeile -

1. Group: May 
2. Group: 11 
3. Group: 10:03:49 
4. Group: 2000 
5. Group: SHELL 
6. Group: 6 
7. Group: -Task=vt0-IPAddr=172.0.0.0-User=manager 
8. Group: Command is display info 

Dies wählt nicht die zweite Zeile als das hat nicht; im letzten Abschnitt.

Ich habe versucht, die Gruppe 7 optional

^%(\w{3})\s+(\d+)\s*([0-9]+\s?:\s?[0-9]+\s?:\s?[0-9]+):[0-9]+\s*(\d{4})?\s*\S*\s*(.*)/(\d+)/\S*:(.*);?(.*) 

Ausgang machen:

1.1 Group: May 
1.2. Group: 11 
1.3. Group: 10:03:49 
1.4. Group: 2000 
1.5. Group: SHELL 
1.6. Group: 6 
1.7. Group: -Task=vt0-IPAddr=172.0.0.0-User=manager; Command is display info 
1.8. Group: 

2.1. Group: May 
2.2. Group: 11 
2.3. Group: 10:03:51 
2.4. Group: 2000 
2.5. Group: SSH 
2.6. Group: 6 
2.7. Group: STEL user manager (IP: 172.0.0.0) logged out. 
2.8. Group: 

aber noch ist es nicht meine Anforderungen erfüllen. Warum 1,7 Linie nicht verschüttet wird, hat es auch; und ich möchte 2,7 Ausgang kommen in 2,8 und 2,7 sollte so leer wie die zweite Zeile nicht kommen;

Gibt es eine Möglichkeit, dies mit Regex zu erreichen?

+0

Ich bin vor ein weiteres kleines Problem mit dem regulären Ausdruck - % Jun 13 01: 10: 00: 942 2016 HP OPTMOD/4/MODULE_IN: -Slot = 3; GigabitEthernet3/0/0: Der Transceiver ist 1000_BASE_SX_SFP. Für diese Linie wird die fünfte Capture-Gruppe 'OPTMOD/4/MODULE_IN wie kommen: -Slot = 3; GigabitEthernet3:' Aber ich will es nur OPTMOD werden. Ich denke, es liegt daran, dass wir mehrere haben: in der Linie. Aber konnte nicht herausfinden, wie man es beheben kann. –

Antwort

1

Verwendung nicht-Erfassung optionale Gruppe ((?:)):

^%(\w{3})\s+(\d+)\s*([0-9]+\s?:\s?[0-9]+\s?:\s?[0-9]+):[0-9]+\s*(\d{4})?\s*\S*\s*(.*)/(\d+)/\S*:(?:(.*);)?(.*) 

Dies wird die Gruppe 7 optional machen.

Usage: https://regex101.com/r/oS3bN6/1

+0

Danke .. Es hat perfekt funktioniert. –