最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python如何利用re模塊正則表達(dá)式匹配ip地址

 更新時間:2023年08月31日 10:05:25   作者:shanf7921  
這篇文章主要介紹了python如何利用re模塊正則表達(dá)式匹配ip地址問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

python中利用正則表達(dá)式判斷ipv4地址是否合法

ip地址的范圍為0.0.0.0-255.255.255.255,分成四段,則每段的范圍都是0-255,因此,以一段進(jìn)行分析:

在進(jìn)行書寫匹配規(guī)則時,可以將每段的取值分為4個區(qū)間。即0-99、100-199、200-249、250-255。

其正則匹配的表達(dá)式應(yīng)為:

# 匹配 0-255的表達(dá)式書寫方法pattern = re.compile(r'([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])')
# 匹配 0-255的表達(dá)式書寫方法
pattern = re.compile(r'([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])')

以下作具體解釋

  • 0-99:[1-9]?\d

問號(?)表示匹配0或1次,此表達(dá)式可以匹配0-99內(nèi)任意是數(shù)值。

  • 100-199:1\d\d

第一位為1,第二位和第三位為0-9之間的任意數(shù)值。

  • 200-249:2[0-4]\d

200-249范圍內(nèi),第一位固定為2,第二位取值范圍為[0-4],第三位為0-9之間任意數(shù)字,使用’\d’進(jìn)行匹配。

  • 250-255:25[0-5]

250-255范圍內(nèi),前兩位固定為25,最后一位取值為[0-5]。

使用 | 符號,將四部分連接起來,即是一條完整的匹配0-255范圍的表達(dá)式:([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])

此時應(yīng)該已經(jīng)能夠理解,如何進(jìn)行一段ip地址的匹配,再講解如何匹配完整的ip地址。

簡單理解就是(0-255).(0-255).(0-255).(0-255)。使用四段相同的表達(dá)式,并在四段表達(dá)式之間增加3個點(diǎn)(.)。

可將前三段ip值和三個點(diǎn)看作三部分,即每部分為(0-255).。

(0-255).的匹配表達(dá)式可書寫為(([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.),此表達(dá)式需要使用三次,因此可以寫成 (([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.){3}

最終,匹配0.0.0.0-255.255.255.255的表達(dá)式如下所示:

# 匹配 0.0.0.0-255.255.255.255的表達(dá)式書寫方法
pattern = re.compile(r'(([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.){3}([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])')

下面作幾個測試用例(使用fullmatch)

In [1]: pattern.fullmatch('0.123.12.23')
Out[1]: <re.Match object; span=(0, 11), match='0.123.12.23'>
In [2]: pattern.fullmatch('192.168.0.1')
Out[2]: <re.Match object; span=(0, 11), match='192.168.0.1'>
In [3]: pattern.fullmatch('255.255.255.255')
Out[3]: <re.Match object; span=(0, 15), match='255.255.255.255'>
# 以上三個ip都屬于正常ip,因此能夠正確匹配
# -----------------------------------------------
# 以下兩個示例不是正確的ip,所以匹配不到,無輸出結(jié)果
In [4]: pattern.fullmatch('255.255.255.256')
In [5]: pattern.fullmatch('1255.255.255.255')

再使用search、match方法對以上兩個錯誤ip進(jìn)行匹配測試。

In [11]: pattern.search('255.255.255.256')
Out[11]: <re.Match object; span=(0, 14), match='255.255.255.25'>
# 匹配結(jié)果為 255.255.255.25
In [12]: pattern.search('1255.255.255.255')
Out[12]: <re.Match object; span=(1, 15), match='255.255.255.25'>
# 匹配結(jié)果為 255.255.255.25
In [13]: pattern.match('255.255.255.256')
Out[13]: <re.Match object; span=(0, 14), match='255.255.255.25'>
# 匹配結(jié)果為 255.255.255.25
In [14]: pattern.match('1255.255.255.255')
# 無輸出結(jié)果
# -----------------------------------
# 請注意觀察以下示例的匹配結(jié)果
In [15]: pattern.search('257.127.0.0.1')
Out[15]: <re.Match object; span=(1, 11), match='57.127.0.0'>
In [16]: pattern.search('255.255.255.122.256')
Out[16]: <re.Match object; span=(0, 15), match='255.255.255.122'>

為何會出現(xiàn)上述結(jié)果?首先對于search、match、fullmatch進(jìn)行一個對比:

方法解釋
search只匹配一次,查找整個字符串
match只匹配一次,從開頭開始匹配
fullmatch對字符串進(jìn)行完整匹配

由于search匹配時,會查找整個字符串,然后返回滿足表達(dá)式的結(jié)果。

所以使用search方法進(jìn)行匹配時,對于ip的第一個字段和最后一個字段出錯的情況下,會自動進(jìn)行ip址的截取,盡量使結(jié)果滿足表達(dá)式的要求,但是這種結(jié)果并不是我們想要的。

  • match是從頭開始匹配,當(dāng)ip地址的前三段都正確,而最后一個字段出錯時,也無法得出預(yù)期的結(jié)果。
  • fullmatch是完全匹配,因此字符串要完全滿足ip地址規(guī)則時,才會返回正確結(jié)果,ip地址有誤時,無輸出(輸出為None)。

當(dāng)然,非要使用search和match進(jìn)行匹配也是可以的,首先了解一下“零寬斷言”。

零寬斷言

用于查找特定內(nèi)容之前或之后的內(nèi)容,但并不包括特定內(nèi)容本身(零寬)。

類似于^、 $、 \b一樣的作用,指定某一位置需要滿足某些條件(斷言)。

表達(dá)式說明
(?=exp)匹配exp前面的位置 (此位置后面是exp)
(?<=exp)匹配exp后面的位置(此位置前面是exp)
(?!exp)此位置后面不能是exp
(?<!exp)此位置前面不能是exp

匹配ip地址時,不允許對不合法的地址進(jìn)行截取 以得到符合規(guī)則的ip地址,即是要求:匹配結(jié)果在原字符串中的位置之前和之后不能有被截取的點(diǎn)(.)和數(shù)字。

根據(jù)以上分析 修改原有正則表達(dá)式,在原表達(dá)式的前面添加(?<![\.\d]),最后面添加(?![\.\d]),即修改之后完整的表達(dá)式為:

pattern = re.compile(r'(?<![\.\d])(([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.){3}([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])(?![\.\d])')

通過上面這條正則表達(dá)式,對之前錯誤的ip地址重新進(jìn)行匹配驗(yàn)證,

結(jié)果如下:

In [1]: import re
In [2]: pattern = re.compile(r'(?<![\.\d])(([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.){3}([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])(?![\.\d])')
# 以下各語句執(zhí)行后都無輸出結(jié)果,說明正則匹配不成功,ip地址不合法
In [11]: pattern.search('255.255.255.256')
In [12]: pattern.search('1255.255.255.255')
In [13]: pattern.match('255.255.255.256')
In [14]: pattern.match('1255.255.255.255')
In [15]: pattern.search('257.127.0.0.1')
In [16]: pattern.search('255.255.255.122.256')

總結(jié)

以上就是在python中如何利用re模塊判斷ip地址是否合法的介紹。

僅為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 如何給pip更換國內(nèi)源并配置Python的國內(nèi)鏡像詳解

    如何給pip更換國內(nèi)源并配置Python的國內(nèi)鏡像詳解

    pip安裝的包都存在于外國的服務(wù)器上,速度會非常慢,可以給pip配置國內(nèi)鏡像,直接從國內(nèi)服務(wù)器安裝依賴,這篇文章主要介紹了如何給pip更換國內(nèi)源并配置Python的國內(nèi)鏡像的相關(guān)資料,需要的朋友可以參考下
    2025-04-04
  • Python元組及文件核心對象類型詳解

    Python元組及文件核心對象類型詳解

    本篇文章主要給大家詳細(xì)講述了Python核心對象類型之元組及文件的相關(guān)內(nèi)容,對此有興趣的學(xué)習(xí)下。
    2018-02-02
  • 用python編寫一個圖片拼接工具

    用python編寫一個圖片拼接工具

    大家好,本篇文章主要講的是用python編寫一個圖片拼接工具,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • python 獲得任意路徑下的文件及其根目錄的方法

    python 獲得任意路徑下的文件及其根目錄的方法

    今天小編就為大家分享一篇python 獲得任意路徑下的文件及其根目錄的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • python如何對數(shù)組進(jìn)行降維

    python如何對數(shù)組進(jìn)行降維

    這篇文章主要介紹了python如何對數(shù)組進(jìn)行降維問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 用Python shell簡化開發(fā)

    用Python shell簡化開發(fā)

    這篇文章給大家詳細(xì)分享了在Python的開發(fā)中,如何通過Python shell簡化開發(fā),有興趣的朋友們可以學(xué)習(xí)下。
    2018-08-08
  • Python標(biāo)準(zhǔn)異常和異常處理詳解

    Python標(biāo)準(zhǔn)異常和異常處理詳解

    這篇文章主要介紹了Python標(biāo)準(zhǔn)異常和異常處理詳解,本文講解了python標(biāo)準(zhǔn)異常、什么是異常、異常處理的多種方法和實(shí)例等內(nèi)容,需要的朋友可以參考下
    2015-02-02
  • 淺談keras中自定義二分類任務(wù)評價(jià)指標(biāo)metrics的方法以及代碼

    淺談keras中自定義二分類任務(wù)評價(jià)指標(biāo)metrics的方法以及代碼

    這篇文章主要介紹了淺談keras中自定義二分類任務(wù)評價(jià)指標(biāo)metrics的方法以及代碼,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Python HTMLParser模塊解析html獲取url實(shí)例

    Python HTMLParser模塊解析html獲取url實(shí)例

    這篇文章主要介紹了Python HTMLParser模塊解析html獲取url實(shí)例,HTMLParser是python用來解析html的模塊,HTMLParser采用的是一種事件驅(qū)動的模式,需要的朋友可以參考下
    2015-04-04
  • Python中paramiko模塊的基礎(chǔ)操作與排錯問題

    Python中paramiko模塊的基礎(chǔ)操作與排錯問題

    python的ssh庫操作需要引入一個遠(yuǎn)程控制的模塊——paramiko,可用于對遠(yuǎn)程服務(wù)器進(jìn)行命令或文件操作,這篇文章主要介紹了Python學(xué)習(xí)之paramiko模塊的基礎(chǔ)操作與排錯,需要的朋友可以參考下
    2022-09-09

最新評論

陇西县| 武义县| 陆丰市| 汝州市| 萝北县| 吉木乃县| 浮山县| 金秀| 五家渠市| 金阳县| 平潭县| 剑河县| 景德镇市| 牟定县| 太谷县| 绥化市| 连山| 望奎县| 吉安市| 高唐县| 区。| 荃湾区| 宁蒗| 石城县| 衢州市| 巢湖市| 鄂托克前旗| 德惠市| 通渭县| 岑溪市| 慈溪市| 吉木乃县| 奈曼旗| 西昌市| 灵璧县| 永吉县| 通道| 即墨市| 特克斯县| 绥宁县| 万全县|