[英]Find a list of unique IP address from a JSON log file in Python
[英]extract valid and unique ip address from a file
我需要從文本文件中解析有效且唯一的IP地址。
要解析的樣本文件:
ping working 3.3.3.3
ping not working 8.8.8.888
ping working 5.5.55.6 ip address
I am repeat 3.3.3.3
invalid 0.0.0.266
I am not repeat 8.88.8.255
I am 255.255.255.0
I am 111.111.111.111
I am not valid 355.355.355.355
I am valid 192.168.99.1
碼:
import re
pattern = r"((([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])[ (\[]?(\.|dot)[ )\]]?){3}([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5]))"
f = open("parse-me.txt","r")
text = f.read()
ips = [match[0] for match in re.findall(pattern, text)]
print list(set(ips))
當我運行它時,它給出以下輸出:
python parse_ip.py
['111.111.111.111', '255.255.255.0', '192.168.99.1', '3.3.3.3', '0.0.0.26', '8.88.8.25', '5.5.55.6', '8.8.8.88']
255中的最后一位數字以某種方式錯過了輸出。 有人可以幫我解決這個問題嗎?
如果使用以下正則表達式,將解決您的問題:
pattern = r"(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])[ (\[]?(\.|dot)[ )\]]?){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9]))"
如您所見,我只是重新排列了您的正則表達式。 實際上在“ |”中 如果第一個條件為真,則不會進行第二個條件匹配。
但是請注意,此正則表達式在將8.8.88.888解析為8.8.88.88時仍然給出錯誤的結果
我想這是回答您的疑問,但您需要新的正則表達式
如下所述,依靠Python自己的IP地址驗證可能更有意義:
import socket
import re
valid = set()
with open('input.txt') as f_input:
for ip in re.findall(r'(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})', f_input.read()):
try:
socket.inet_aton(ip)
valid.add(ip)
except socket.error:
pass
print list(valid)
這將顯示
['111.111.111.111', '255.255.255.0', '8.88.8.255', '192.168.99.1', '3.3.3.3', '5.5.55.6']
希望這會有所幫助
In[61]:
f = open("parse-me.txt","r")
text = f.read()
re.findall( r'[0-9]+(?:\.[0-9]+){3}', text)
Out[62]:
['3.3.3.3',
'8.8.8.888',
'5.5.55.6',
'3.3.3.3',
'0.0.0.266',
'8.88.8.255',
'255.255.255.0',
'111.111.111.111',
'355.355.355.355',
'192.168.99.1']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.