Python Regex, das einzelne IPs und IP-Adressbereiche durchlaufen kann - Python, Regex

Es wurde versucht, die Möglichkeit neu zu bestimmen, mehrere IP-Adressbereiche und einzelne IP-Adressen bereitzustellen. zum Beispiel kann die Zeichenfolge eine beliebige Anzahl von einzelnen IPs oder einen Bereich von IPs wie z

Beispiel 1

ip=10.10.10.3,10.10.10.20-80,10.10.10.4,10.10.11.100-200

oder es könnte nur eine IP enthalten

Beispiel 2

ip=10.10.10.5

Ich bin in der Lage, eine Regex herauszufinden, wenn ich weißgenau wie viele IPs oder IP-Bereiche ich liefern. Wo ich verloren bin, wie baue ich eine Regex, so dass es eine beliebige Anzahl von IPs und IP-Bereiche, ohne zu wissen, wie viele geliefert werden kann? Ich könnte 4 wie in Beispiel 1 oder sogar bis zu 10 verschiedene Kombinationen haben.

AKTUALISIEREN:

basierend auf den Antworten habe ich diesen letzten Regex funktioniert :)

ip=(d+(?:.d+){3}(?:-d+)?,?)+

this captures it fine at least in an online regex Tester, aber Online-Tester hatte ich ein Gruppenspiel definiert, das ich sehe :) das sollte keine Rolle spielen Ich würde am Ende denken, weil ich immer noch mein volles Spiel bekomme, das ich brauchte?

Match 1
Full match  0-50    `ip=10.10.10.3,10.10.10.20-80,10.10.10.4,10.101.1.2`
Group 1.    40-50   `10.101.1.2`

Antworten:

1 für die Antwort № 1

Warum kann man "ip =" nicht mit nichts ersetzen, und nur eine Split-Zeichenkette am Komma machen?

ip = "ip=10.10.10.3,10.10.10.20-80,10.10.10.4,10.10.11.100-200"


def get_ips(ips_list):
return ips_list.replace("ip=", "").split(",")


print(get_ips(ip))

Entweder das, oder, wenn Sie wirklich Regex dafür brauchen:

import re

ip = "ip=10.10.10.3,10.10.10.20-80,10.10.10.4,10.10.11.100-200"


def get_ips_with_regex(ips_list):
return re.findall(r"([d.-]+)", ips_list)


print(get_ips_with_regex(ip))

Nicht die ausführlichste Regex, aber wenn Sie wissen, dass Sie es nur IP "s übergeben, wird es die Arbeit machen


Speisekarte