2016-06-22 17 views
0

をキャプチャするために、私は、この文字列からグループの数をキャプチャする - これは、以下のグループをcaputures正規表現:どのようにオプションのグループ

^%(\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*:(.*);(.*) 

-

%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. 

次のように私が書いた正規表現があります最初の行から -

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 

これは、2番目の行を選択しません。最後のセクションで。

私はグループ7オプション

^%(\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*:(.*);?(.*) 

出力作ってみました:

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: 

が、それでも、それは私の要件を満たしていないが。 なぜ1.7回線にもそれが溢れていません。 と私は2.8に来る2.7の出力をしたいと2.7は2番目の行が持っていないとして空になるはずです。

正規表現を使用してこれを達成する方法はありますか?

+0

Iが正規表現と別の小さな問題に直面してい - %6月13日01:10:00:942 2016 HP OPTMOD/4/MODULE_IN: - スロット= 3; GigabitEthernet3/0/0:トランシーバは1000_BASE_SX_SFPです。 この行では、5番目のキャプチャグループは 'OPTMOD/4/MODULE_IN:-Slot = 3; GigabitEthernet3:' となりますが、OPTMODだけにしたいと思います。 私はそれが複数あることが原因と推測します。しかし、それを修正する方法を理解できませんでした。 –

答えて

1

使用非キャプチャオプションのグループ((?:)):

^%(\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*:(?:(.*);)?(.*) 

これは、グループ7はオプションになります。

使用:https://regex101.com/r/oS3bN6/1

+0

ありがとう..それは完全に働いた。 –

関連する問題