2015-06-12 13 views
6

Questa espressione regolare ([a-z0-9]{1,4}:+){3,5}[a-z0-9]{1,4}|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} quasi doe il lavoro dei corrispondenti solo indirizzi IP (v4 e v6) e niente altro, ma purtroppo, per il testo qui sotto e testo simile, ma riprende anche i campi in grassetto:Regex: corrisponde all'indirizzo IP tranne quando preceduto da determinati caratteri?


da mail.example.com (example.com. [213.239.250.131]) da mx.google.com con ESMTPS id xc4si15480310lbb.82.2 014.10.26.06 .16.58 per (versione = TLSv1. 2 cifrario = bit ECDHE-RSA-AES128-GCM-SHA256 = 128/128); Sun, 26 ottobre, 2014 06:16:58 -0700 (PDT)

Received: from ssservices1-1 (192.168.20.142) per mail.supershuttle.com (192.168.20.110) con Microsoft SMTP Server id 14.2 .347.0; Mar 21 apr 2015

Received: from ssservices1-1 (192.168.20.142) per mail.supershuttle.com (192.168.20.110) con id Microsoft SMTP (TLS) Server 14.2.347.0; Mar 21 Apr 2015

ricevute: da plug.mysitehosted.com (plug.mysitehosted.com [10.248.1.153]) (usando TLSv1 con cifrario DHE-RSA-AES256-SHA) da 0.0. 0.0: 2500 (trex/5.0.19); Tue, 11 Mar 2014 06:14:03 GMT


Qual è il miglior avvicinamento (sarò con Python) per omettere queste partite? Due sono preceduti dal testo "id", sebbene nel primo caso, non direttamente precedente.

risposta

4
([a-z0-9]{1,4}:+){3,5}[a-z0-9]{1,4}|(?<!id)(?<!\.)\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b(?!\.) 

Si può provare this.Through lookaheads ci assicuriamo l'indirizzo IP non è preceduta o seguita da . .Vedi demo.

https://regex101.com/r/hI0qP0/3

2

Come ulteriore suggerimento si potrebbe aggiungere avanti positivo e le ricerche indietro. Ti permetteranno di guardare ciò che è prima e dopo la partita senza consumare nulla. Il tuo IP sono sempre circondati da () o [], in modo da poter provare:

(?<=\[|\()your regex(?=\]|\)) 

Questo corrisponderà your regex sia:

(your regex) 
[your regex] 
Problemi correlati