/ 正規表現を使用したpythonでの/ ipアドレスの検証[複製] - python、正規表現

正規表現を使用したpythonでのIPアドレス検証[複製] - python、正規表現

次のIPアドレスの検証で私はそれが有効なIPアドレスであるかどうかを確認したいかどうか私は以下の再を使用してこれを行うことができます

>>> ip="241.1.1.112343434"
>>> aa=re.match(r"d{1,3}.d{1,3}.d{1,3}.d{1,3}[^0-9]",ip)
>>> aa.group()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: "NoneType" object has no attribute "group"

回答:

回答№1の19

代わりにアンカーを使用してください。

aa=re.match(r"^d{1,3}.d{1,3}.d{1,3}.d{1,3}$",ip)

これらは文字列の始めと終わりが正規表現の始めと終わりで一致することを確認します。 (まあ、技術的には、開始する必要はありません。 ^ アンカーに含まれているからです。 .match() 方法)。

次に、その結​​果にアクセスする前に、正規表現が実際に一致したかどうかを確認します。

if aa:
ip = aa.group()

もちろん、これはIPアドレスを検証するための良い方法ではありません(正しい方法についてはgnibblerの答えをチェックしてください)。ただし、正規表現はより大きな文字列でIPアドレスを検出するのに役立ちます。

ip_candidates = re.findall(r"bd{1,3}.d{1,3}.d{1,3}.d{1,3}b", ip)

ここで、 b 単語境界アンカーは、各セグメントの数字が3を超えないようにします。


答え№2の26

IPアドレスを検証するためにライブラリ関数を使用しないのはなぜですか?

>>> ip="241.1.1.112343434"
>>> socket.inet_aton(ip)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
socket.error: illegal IP address string passed to inet_aton

回答№3の11

d{1,3} のような数字にマッチします 00 または 333 有効なIDでもありません。

この 引用して、sminkからの素晴らしい答えです。

ValidIpAddressRegex = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$";

回答№4の7
try:
parts = ip.split(".")
return len(parts) == 4 and all(0 <= int(part) < 256 for part in parts)
except ValueError:
return False # one of the "parts" not convertible to integer
except (AttributeError, TypeError):
return False # `ip` isn"t even a string

回答№5の場合は0

以下は、IPが有効かどうかをチェックします。IPが0.0.0.0から255.255.255.255の範囲内であれば、出力は真になり、そうでなければ偽になります。

[0<=int(x)<256 for x in re.split(".",re.match(r"^d+.d+.d+.d+$",your_ip).group(0))].count(True)==4

例:

your_ip = "10.10.10.10"
[0<=int(x)<256 for x in re.split(".",re.match(r"^d+.d+.d+.d+$",your_ip).group(0))].count(True)==4

出力:

>>> your_ip = "10.10.10.10"
>>> [0<=int(x)<256 for x in re.split(".",re.match(r"^d+.d+.d+.d+$",your_ip).group(0))].count(True)==4
True
>>> your_ip = "10.10.10.256"
>>> [0<=int(x)<256 for x in re.split(".",re.match(r"^d+.d+.d+.d+$",your_ip).group(0))].count(True)==4
False
>>>