[PYTHON] RegEx를 사용하여 Python에서 IP 주소 일치시키기
PYTHONRegEx를 사용하여 Python에서 IP 주소 일치시키기
sys.argv 입력이 IP 주소의 RegEx와 일치하는지 확인하기위한 테스트를하려고합니다.
간단한 테스트로서, 나는 다음과 같은 것을 가지고있다.
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"
그러나 임의의 값을 전달할 때 대부분의 경우 "Acceptable IP address"를 반환하지만, 주소가 기본적으로 \ d +와 같은 경우는 예외입니다.
해결법
-
==============================
1.정규 표현식을 다음과 같이 수정해야합니다.
정규 표현식을 다음과 같이 수정해야합니다.
pat = re.compile("^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$")
그것은 왜냐하면 . "모든 문자"를 나타내는 와일드 카드입니다.
-
==============================
2.regex를 사용하여 IP 주소의 유효성을 검사하는 것은 나쁜 생각입니다. 이는 999.999.999.999를 유효한 것으로 통과시킵니다. 대신 소켓을 사용하여이 접근법을 시도하십시오. 훨씬 더 나은 유효성 검사와 마찬가지로 쉽지만 쉽지는 않습니다.
regex를 사용하여 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')
대신 parse-the-host 접근법을 사용하려면이 코드가 정확하게 수행합니다.
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
-
==============================
3.ip v4를위한 정규식 :
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]?)$
그렇지 않으면 유효한 IP 주소가 999.999.999.999, 256.0.0.0 등이 아닙니다.
-
==============================
4.같은 상황을 겪었습니다. 유용한 소켓 라이브러리를 사용하여 대답을 찾았지만 ipv6 주소를 지원하지 않습니다. 그것을위한 더 좋은 방법을 찾았습니다 :
같은 상황을 겪었습니다. 유용한 소켓 라이브러리를 사용하여 대답을 찾았지만 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')
-
==============================
5.당신은 사용하려고합니다. a. 어떤 캐릭터의 와일드 카드가 아닙니다. \를 사용하십시오. 대신 기간을 나타냅니다.
당신은 사용하려고합니다. a. 어떤 캐릭터의 와일드 카드가 아닙니다. \를 사용하십시오. 대신 기간을 나타냅니다.
-
==============================
6.
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')
-
==============================
7.
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 주소가 실제로 평가되는 방법을 설명하는 간단한 설명. 이진수가 필수 사항은 아니지만 여부를 확인합니다. 희망이 당신이 좋아.
-
==============================
8.IP 주소는 다음 인증을 사용합니다.
IP 주소는 다음 인증을 사용합니다.
의심스러운 점이 있으면 답장 해 주시겠습니까?
-
==============================
9.
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 주소는 192.168.2.2이고 10.123.56.25는 유효하지 않습니다. 일부 문자열과 결합되어 192.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'
수정이 필요한 경우 의견을주십시오.
-
==============================
10.파이썬 2.7에서 작동합니다 :
파이썬 2.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"
from https://stackoverflow.com/questions/11264005/using-a-regex-to-match-ip-addresses-in-python by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] Python 2.7을 사용하여 matplotlib 플롯의 축에 소수점 및 과학 표기법을 표시 할 수 있습니까? (0) | 2018.11.08 |
---|---|
[PYTHON] PyEphem을 사용하여 새벽과 일몰 시간 계산하기 (0) | 2018.11.08 |
[PYTHON] Python 파일 구문 분석 : 텍스트 파일에서 트리 만들기 (0) | 2018.11.08 |
[PYTHON] 동일한 메소드 이름을 가진 다른 경로의 Python 다중 상속 (0) | 2018.11.08 |
[PYTHON] 파이썬에서 너무 많은 파일 열기 (0) | 2018.11.08 |