m = re.findall("\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}",s)
Comment puis-je le modifier pour qu'il corresponde non seulement à IPv4, mais aussi à quelque chose avec CIDR comme 10.10.10.0/24
?python regex CIDR correspondant
m = re.findall("\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}",s)
Comment puis-je le modifier pour qu'il corresponde non seulement à IPv4, mais aussi à quelque chose avec CIDR comme 10.10.10.0/24
?python regex CIDR correspondant
Ajouter "(?:/\d{1,2})?"
.
Vous obtenez r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(?:/\d{1,2})?"
pour un motif.
ce étend votre expression existante
\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\\\d{1,2}
(?:\d{1,3}\.){3}\d{1,3}(?:/\d\d?)?
Cette page semble avoir une solution http://hse-at-work.blogspot.com/2006/11/regular-expression-to-match-ipv4.html
\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(?:/\d{1,2}|)
testé dans Expresso
Correspondant:
64.33.232.212
64.33.232.212/30
J'ai rencontré des problèmes lors de l'utilisation d'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 ces correspondants, j'ai ajouté regarder vers l'avenir/derrière les affirmations:
IP_RE = re.compile(r"(?<!\d\.)(?<!\d)(?:\d{1,3}\.){3}\d{1,3}(?!\d|(?:\.\d))")
IP_CIDR_RE = re.compile(r"(?<!\d\.)(?<!\d)(?:\d{1,3}\.){3}\d{1,3}/\d{1,2}(?!\d|(?:\.\d))")
Les (?<!\d\.)(?<!\d)
vérifie qu'il n'y a pas un numéro ou octet avant votre premier octet (ie: n ° 1 avant 111.2.3.4). Et (?!\d|(?:\.\d))
vérifie qu'il n'y a pas un nombre/octet après votre dernier (ie: n ° 5 après 1.2.3.4).
Ensuite, pour vérifier que les chaînes ceux-ci correspondent sont les adresses IP valides (par exemple: non 277.1.1.1), vous pouvez utiliser
socket.inet_aton(ip) #raises exception if IP is invalid
Il y a un all_matching_cidrs (ip, cidrs) fonction dans l'IP netaddr module prend une ip et l'associe à une liste d'adresses CIDR.
400.123.34.56 est apparié mais pas valide (mais regex de asdasdasd a le même problème) – Tim
Juste pour info, le '/' peut devoir être échappé dans des langages tels que Javascript. – Dave