m = re.findall("\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}",s) How do I modify it so it will match not only IPv4, but also something with CIDR like 10.10.10.0/24?
8 Réponses :
Ajouter qui vous obtient "(?: / \ d {1,2})?" code>. p>
r "\ d {1,3} \. \ d {1,3} \. \ d {1,3} \. \ d {1,3} (?: / \ D {1,2})? " code> pour un motif. P>
Ceci étend votre expression existante
(?: \ d {1,3} \.) {3} \ d {1,3} (?: / \ d \ d?)? Code> P>
400.123.34.56 est égalé mais non valide (mais la regex d'Asdasdasd a le même problème))
Juste FYI, le '/' peut avoir besoin d'être échappé dans des langues telles que JavaScript.
testé dans Expresso P> correspondance : p> \ d {1,3} \. \ d {1,3} \. \ d {1,3} \. \ d {1,3} (?: / \ d {1,2 } |) code>
J'ai eu des problèmes en utilisant une regex similaire à la vôtre. Il correspondait à 1.2.3.4.5 (comme 1.2.3.4) et 1111.2.3.4 (comme 111.2.3.4). Pour éviter de correspondre à ceux-ci, j'ai ajouté regarder à l'avance / derrière assertions: Ensuite, pour vérifier que les chaînes de ces correspondances sont valides IPS valides (par exemple: non 277.1.1.1), vous pouvez utiliser P> (? vérifie que Il n'y a pas de numéro ou d'octet avant votre premier octet (c.-à-d. N ° 1 avant 111.2.3.4).
Et
(?! \ D | (?: \. \ D)) code> vérifie qu'il n'y a pas de numéro / octet après votre dernier (c.-à-d .: no .5 après 1.2.3.4). p>
socket.inet_aton (IP) #raises exception si IP est invalide code> p> p>
Il existe une fonction All_Matching_CIDRS (IP, CIDRS) dans le module IP de Neaddr. Il prend une adresse IP et la correspondre à une liste des adresses de la CIDR. p>
Il suffit de faire une très belle regex qui vérifie également la correction du format IP, n'est pas trop longue et correspond à la longueur de sous-réseau éventuellement:
(25[0-5]|2[0-4]\d|1\d\d|\d\d|\d).(?1).(?1).(?1)\/?(\d\d)?
Encore mieux: '\ b (25 [0-5] | 2 [0-4] \ d \ b | 1 \ d \ d | \ d \ d | \ d) \ b \. \ B (? 1) \ b \. \ b (? 1) \ b \ \ \ b (? 1) \ b \ b (\ / \ d \ d | \ / \ d)? \ b '
Essayez ceci: p> sortie: p> oui, adresse IP 0.0.0.0/0 € 0 est correct p> Oui, adresse IP 255.255.255.255/21 est correct p> Oui, adresse IP 17.2.5.0/21 est correct p> oui, Adresse IP 29.29.206.99 est correct p> Non, adresse IP est incorrecte p> h1>