python 正則表達式匹配IP地址


一、實驗環境

1.Windows7x64_SP1

2.anaconda2.5.0 + python2.7(anaconda集成,不需單獨安裝)

3.pyinstaller3.0

二、實驗目的

從text文本中獲取字符串,篩選合法IP地址

2.1 文本內容如下

請輸入合法IP地址,非法IP地址和其他字符將被過濾!
增、刪、改IP地址后,請保存、關閉記事本!
192.168.8.84
192.168.8.85
192.168.8.86
0.0.0.1
256.1.1.1
192.256.256.256
192.255.255.255
aa.bb.cc.dd

2.2 編寫函數讀取文本文件,篩選合法IP地址

    def get_ip_list(self):
        try:
            file = open(self.smart_ip_list_file, 'r')
            str = file.readlines()
            str_del_enter = [x.strip('\n') for x in str]                                                            #去除\n
            comp = re.compile(r'^((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}')
            str_legal_ip = [x for x in str_del_enter if comp.match(x)]                                              #篩選合法IP地址
            file.close()
            return str_legal_ip
        except:
            self.ui.textEdit.setText('讀取"%s"報錯' %(self.smart_ip_list_file))
            return []  

2.3 代碼說明

1.從文本文件中讀取所有行,除首行外均以\n結束,如下代碼用於去除\n

str_del_enter = [x.strip('\n') for x in str]

2.IP地址的長度為32位(共有2^32個IP地址),分為4段,每段8位,用十進制數字表示,每段數字范圍為0~255,段與段之間用句點隔開  

根據規則:每段相同,范圍都在 0 ~ 255
0~255 對應的正則表達式為 (2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2}

  • 2(5[0-5]|[0-4]\d) 匹配:200 ~ 255
  • [0-1]?\d{1,2} 匹配:0 ~ 199

0 到 255 的式子已經寫出來了,那么一共四段再加上中間的點就很容易了

  • 后邊“點”和“數字”重復三次就可以了,(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}
  • 全部合起來,((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}

通過如上正則表達式匹配字符串,存在如下問題

256.1.1.1    ->    匹配結果56.1.1.1

 

解決方式,如上表達式前面添加^,最終調用compile函數,參數方式如下

comp = re.compile(r'^((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}')

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM