21

sys.argv入力がIPアドレスの正規表現と一致するかどうかを確認するためのテストを行おうとしています...

簡単なテストとして、私は次のものを持っています...

import re

pat = re.compile("\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}")
test = pat.match(hostIP)
if test:
   print "Acceptable ip address"
else:
   print "Unacceptable ip address"

ただし、ランダムな値を渡すと、基本的に。と同等の「アドレス」がある場合を除いて、ほとんどの場合「許容可能なIPアドレス」が返されます\d+

4

13 に答える 13

40

正規表現を使用してIPアドレスを検証することはお勧めできません。これにより、999.999.999.999が有効として渡されます。代わりにソケットを使用してこのアプローチを試してください。検証がはるかに優れており、簡単ではないにしても同じくらい簡単です。

import socket

def valid_ip(address):
    try: 
        socket.inet_aton(address)
        return True
    except:
        return False

print valid_ip('10.10.20.30')
print valid_ip('999.10.20.30')
print valid_ip('gibberish')

代わりにホスト解析アプローチを本当に使用したい場合は、このコードで正確に実行できます。

def valid_ip(address):
    try:
        host_bytes = address.split('.')
        valid = [int(b) for b in host_bytes]
        valid = [b for b in valid if b >= 0 and b<=255]
        return len(host_bytes) == 4 and len(valid) == 4
    except:
        return False
于 2012-06-29T15:13:38.200 に答える
23

次の方法で正規表現を変更する必要があります

pat = re.compile("^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$")

これ.は、「すべてのキャラクター」を表すワイルドカードだからです。

于 2012-06-29T14:53:24.007 に答える
15

ip v4の正規表現:

^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$

それ以外の場合は、999.999.999.999、256.0.0.0などの無効なIPアドレスを使用します

于 2012-06-30T20:05:01.413 に答える
10

同じ状況に遭遇しました。ソケットライブラリを使用した答えは役に立ちましたが、ipv6アドレスのサポートは提供されていません。そのためのより良い方法を見つけました:

残念ながら、python3でのみ機能します

import ipaddress

def valid_ip(address):
    try: 
        print (ipaddress.ip_address(address))
        return True
    except:
        return False

print (valid_ip('10.10.20.30'))
print (valid_ip('2001:DB8::1'))
print (valid_ip('gibberish'))
于 2017-09-25T10:14:57.287 に答える
3

を使用しようとしています。として 。キャラクターのワイルドカードとしてではありません。\.代わりに、期間を示すために使用します。

于 2012-06-29T14:52:37.057 に答える
0
def ipcheck():
# 1.Validate the ip adderess
input_ip = input('Enter the ip:')
flag = 0

pattern = "^\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}$"
match = re.match(pattern, input_ip)
if (match):
    field = input_ip.split(".")
    for i in range(0, len(field)):
        if (int(field[i]) < 256):
            flag += 1
        else:
            flag = 0
if (flag == 4):
    print("valid ip")
else:
    print('No match for ip or not a valid ip')
于 2017-07-03T18:11:30.917 に答える
0
import re
ipv=raw_input("Enter an ip address")
a=ipv.split('.')
s=str(bin(int(a[0]))+bin(int(a[1]))+bin(int(a[2]))+bin(int(a[3])))
s=s.replace("0b",".")
m=re.search('\.[0,1]{1,8}\.[0,1]{1,8}\.[0,1]{1,8}\.[0,1]{1,8}$',s)
if m is not None:
    print "Valid sequence of input"
else :
    print "Invalid input sequence"

簡単にするために、私はこのアプローチを使用しました。ipv4アドレスが実際にどのように評価されるかを説明するのと同じくらい簡単です。2進数であるかどうかを確認しますが、必須ではありません。あなたがこれを好きになることを願っています。

于 2018-01-04T05:16:16.993 に答える
0
str = "255.255.255.255"
print(str.split('.'))

list1 = str.split('.')

condition=0

if len(list1)==4:
    for i in list1:
        if int(i)>=0 and int(i)<=255:
            condition=condition+1

if condition!=4:
    print("Given number is not IP address")
else:
    print("Given number is valid IP address")
于 2018-12-16T08:48:47.383 に答える
0

本当にRegExsを使用したい場合は、次のコードで、ファイルの構成に関係なく、テキストが多い場合でも(RegExsの概念自体)、ファイル内の無効なIPアドレスをフィルタリングできます。

def getIps(filename):
    ips = []
    with open(filename) as file:
        for line in file:
            ipFound = re.compile("^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$").findall(line)
            hasIncorrectBytes = False
            try:
                    for ipAddr in ipFound:
                        for byte in ipAddr:
                            if int(byte) not in range(1, 255):
                                hasIncorrectBytes = True
                                break
                            else:
                                pass
                    if not hasIncorrectBytes:
                        ips.append(ipAddr)
            except:
                hasIncorrectBytes = True

    return ips
于 2019-06-06T16:31:54.873 に答える
-1

IPアドレスは次の認証を使用します:

  1. 255 ---> 250-255
  2. 249 ---> 200-249
  3. 199 ---> 100-199
  4. 99 ---> 10-99
  5. 9 ---> 1-9

    import re    
    k = 0
    while k < 5 : 
        i = input("\nEnter Ip address : ")
        ip = re.match("^([1][0-9][0-9].|^[2][5][0-5].|^[2][0-4][0-9].|^[1][0-9][0-9].|^[0-9][0-9].|^[0-9].)([1][0-9][0-9].|[2][5][0-5].|[2][0-4][0-9].|[1][0-9][0-9].|[0-9][0-9].|[0-9].)([1][0-9][0-9].|[2][5][0-5].|[2][0-4][0-9].|[1][0-9][0-9].|[0-9][0-9].|[0-9].)([1][0-9][0-9]|[2][5][0-5]|[2][0-4][0-9]|[1][0-9][0-9]|[0-9][0-9]|[0-9])$",i)
        k = k + 1 
        if ip:
            print ("\n=====================")
            print ("Valid IP address")
            print ("=====================")
            break
        else :
            print ("\nInvalid IP")
    else :
        print ("\nAllowed Max 5 times")
    

疑問がある場合は返信してください。

于 2015-02-11T14:55:52.830 に答える
-1
import re

st1 = 'This is my IP Address10.123.56.25 789.356.441.561 127 255 123.55 192.168.1.2.3 192.168.2.2 str1'

ここで、私の有効なIPアドレスは、いくつかの文字列と組み合わされて無効であるため、有効なIPアドレスではない192.168.2.2と想定しています。10.123.56.25192.168.1.2.3

pat = r'\s(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\s|$))'

match = re.search(pat,st1)

print match.group()

================ RESTART: C:/Python27/Srujan/re_practice.py ================
192.168.2.2 

これにより、正確なIPアドレスがgrepさ​​れます。IPアドレスのように見えるパターンは無視できますが、有効なパターンではありません。例:'Address10.123.56.25', '789.356.441.561' '192.168.1.2.3'

変更が必要な場合はコメントしてください。

于 2017-07-20T09:18:59.953 に答える
-2

これはPython2.7で機能します。

import re
a=raw_input("Enter a valid IP_Address:")
b=("[0-9]+"+".")+"{3}"
if re.match(b,a) and b<255:
    print "Valid"
else:
    print "invalid"
于 2017-07-31T12:36:37.213 に答える
-2

"""有効なIPアドレスを見つけるための正規表現"" "

import re


IPV4 = re.fullmatch('([0-2][0-5]{2}|\d{2}|\d).([0-2][0-5]{2}|\d{2}|\d).([0-2][0-5]{2}|\d{2}|\d).([0-2][0-5]{2}|\d{2}|\d)', '100.1.1.2')

if IPV4:
    print ("Valid IP address")

else:
    print("Invalid IP address")
于 2020-07-10T11:16:18.490 に答える