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

Python中使用正則表達(dá)式精準(zhǔn)匹配IP地址的案例

 更新時(shí)間:2025年04月14日 10:50:28   作者:程序員總部  
Python的正則表達(dá)式(re模塊)是完成這個(gè)任務(wù)的利器,但你知道怎么寫才能準(zhǔn)確匹配各種合法的IP地址嗎,今天我們就來(lái)詳細(xì)探討這個(gè)問(wèn)題,感興趣的朋友一起看看吧

在網(wǎng)絡(luò)編程和數(shù)據(jù)處理時(shí),我們經(jīng)常需要從文本中提取或驗(yàn)證IP地址。Python的正則表達(dá)式(re模塊)是完成這個(gè)任務(wù)的利器。但你知道怎么寫才能準(zhǔn)確匹配各種合法的IP地址嗎?今天我們就來(lái)詳細(xì)探討這個(gè)問(wèn)題。

為什么需要IP正則表達(dá)式?

假設(shè)你正在分析服務(wù)器日志,需要提取其中的IP地址?;蛘吣阍陂_(kāi)發(fā)一個(gè)網(wǎng)絡(luò)工具,要驗(yàn)證用戶輸入的IP是否合法。手動(dòng)解析IP地址既麻煩又容易出錯(cuò),這時(shí)候正則表達(dá)式就能派上大用場(chǎng)了。

IP地址的基本結(jié)構(gòu)

一個(gè)合法的IPv4地址由4個(gè)0-255的數(shù)字組成,用點(diǎn)號(hào)分隔。比如:

  • 合法的:192.168.1.1、10.0.0.1
  • 非法的:256.1.1.1(數(shù)字超過(guò)255)、192.168.1(只有3段)

基礎(chǔ)正則表達(dá)式寫法

我們先來(lái)看一個(gè)最簡(jiǎn)單的IP匹配正則:

import re
pattern = r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"
text = "服務(wù)器IP是192.168.1.1和10.0.0.1"
ips = re.findall(pattern, text)
print(ips)  # 輸出: ['192.168.1.1', '10.0.0.1']

這個(gè)正則能匹配到IP,但它有個(gè)明顯的問(wèn)題:無(wú)法過(guò)濾掉超過(guò)255的數(shù)字。比如"300.1.1.1"也會(huì)被匹配到。

精確匹配0-255的數(shù)字

要精確匹配0-255,我們需要更復(fù)雜的表達(dá)式。這里有個(gè)技巧:把數(shù)字分成幾種情況:

  • 0-199:[01]?\d?\d
  • 200-249:2[0-4]\d
  • 250-255:25[0-5]

組合起來(lái)就是:

num = r"(25[0-5]|2[0-4]\d|[01]?\d?\d)"

完整的IP正則表達(dá)式

把上面的數(shù)字模式組合起來(lái),加上點(diǎn)號(hào)分隔符:

ip_pattern = r"(25[0-5]|2[0-4]\d|[01]?\d?\d)\.(25[0-5]|2[0-4]\d|[01]?\d?\d)\.(25[0-5]|2[0-4]\d|[01]?\d?\d)\.(25[0-5]|2[0-4]\d|[01]?\d?\d)"

這樣就能精確匹配合法的IPv4地址了。不過(guò)這個(gè)表達(dá)式看起來(lái)有點(diǎn)長(zhǎng),我們可以用{3}來(lái)簡(jiǎn)化重復(fù)部分:

ip_pattern = r"((25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(25[0-5]|2[0-4]\d|[01]?\d?\d)"

驗(yàn)證IP地址的函數(shù)

我們可以把這個(gè)正則封裝成函數(shù):

import re
def is_valid_ip(ip):
    pattern = r"^((25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(25[0-5]|2[0-4]\d|[01]?\d?\d)$"
    return bool(re.match(pattern, ip))
print(is_valid_ip("192.168.1.1"))  # True
print(is_valid_ip("256.1.1.1"))    # False

注意這里加了^$確保匹配整個(gè)字符串,而不是部分匹配。

從文本中提取IP地址

如果要提取文本中的IP地址,可以這樣寫:

text = "訪問(wèn)來(lái)自192.168.1.1和10.0.0.1,無(wú)效IP如300.1.1.1"
pattern = r"\b(?:(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\b"
ips = re.findall(pattern, text)
print(ips)  # 輸出: ['192.168.1.1', '10.0.0.1']

這里加了\b表示單詞邊界,避免匹配到類似"192.168.1.100"中的"192.168.1.1"。

常見(jiàn)問(wèn)題與陷阱

  • 忘記邊界匹配:不加^$\b可能導(dǎo)致部分匹配
  • 忽略前導(dǎo)零:像"192.168.01.1"這樣的地址其實(shí)也是合法的
  • 性能問(wèn)題:過(guò)于復(fù)雜的正則可能影響匹配速度

如果你在處理更復(fù)雜的網(wǎng)絡(luò)數(shù)據(jù)時(shí)需要這類技巧,可以關(guān)注【程序員總部】。這個(gè)公眾號(hào)由字節(jié)11年技術(shù)大佬創(chuàng)辦,聚集了阿里、字節(jié)、百度等大廠的網(wǎng)絡(luò)編程專家,經(jīng)常分享Python實(shí)戰(zhàn)經(jīng)驗(yàn)和網(wǎng)絡(luò)編程技巧。

IPv6地址匹配

雖然IPv4仍是主流,但I(xiàn)Pv6也越來(lái)越重要。IPv6的正則表達(dá)式更復(fù)雜:

ipv6_pattern = r"([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}"

實(shí)際應(yīng)用案例

假設(shè)我們要分析Nginx日志,提取客戶端IP:

log_line = '127.0.0.1 - - [10/Oct/2023:13:55:36 +0800] "GET / HTTP/1.1" 200 612'
ip_pattern = r"\b(?:(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\b"
ip = re.search(ip_pattern, log_line).group()
print(ip)  # 輸出: 127.0.0.1

性能優(yōu)化建議

預(yù)編譯正則表達(dá)式:

ip_regex = re.compile(r"...長(zhǎng)表達(dá)式...")

對(duì)大量數(shù)據(jù)匹配時(shí)考慮使用生成器

必要時(shí)可以用字符串方法先做初步過(guò)濾

總結(jié)

通過(guò)本文我們學(xué)會(huì)了:

  • IPv4地址的正則表達(dá)式原理
  • 如何精確匹配0-255的數(shù)字段
  • 邊界匹配的重要性
  • 實(shí)際應(yīng)用中的使用技巧

記?。赫齽t表達(dá)式雖然強(qiáng)大,但也要根據(jù)實(shí)際需求選擇合適的復(fù)雜程度。對(duì)于簡(jiǎn)單的IP驗(yàn)證,本文的表達(dá)式已經(jīng)足夠;如果需求更復(fù)雜,可能需要進(jìn)一步調(diào)整。希望這篇文章能幫你在下次處理IP地址時(shí)事半功倍!

到此這篇關(guān)于Python中使用正則表達(dá)式精準(zhǔn)匹配IP地址的文章就介紹到這了,更多相關(guān)python正則表達(dá)式匹配ip地址內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解TensorFlow訓(xùn)練網(wǎng)絡(luò)兩種方式

    詳解TensorFlow訓(xùn)練網(wǎng)絡(luò)兩種方式

    本文主要介紹了TensorFlow訓(xùn)練網(wǎng)絡(luò)兩種方式,一種是基于tensor(array),另外一種是迭代器,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 基于Python實(shí)現(xiàn)DIT-FFT算法

    基于Python實(shí)現(xiàn)DIT-FFT算法

    FFT(Fast Fourier Transformation)是離散傅氏變換(DFT)的快速算法。即為快速傅氏變換。本文將用Python語(yǔ)言實(shí)現(xiàn)DIT-FFT算法,感興趣的可以了解一下
    2022-10-10
  • Python獲取昨天、今天、明天開(kāi)始、結(jié)束時(shí)間戳的方法

    Python獲取昨天、今天、明天開(kāi)始、結(jié)束時(shí)間戳的方法

    今天小編就為大家分享一篇Python獲取昨天、今天、明天開(kāi)始、結(jié)束時(shí)間戳的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • Python中HMAC加密算法的應(yīng)用

    Python中HMAC加密算法的應(yīng)用

    HMAC?算法可用于驗(yàn)證在應(yīng)用程序之間傳遞或存儲(chǔ)在潛在易受攻擊位置的信息的完整性,因此本文為大家整理了一些Python中HMAC加密算法的應(yīng)用,希望對(duì)大家有所幫助
    2023-05-05
  • python腳本執(zhí)行CMD命令并返回結(jié)果的例子

    python腳本執(zhí)行CMD命令并返回結(jié)果的例子

    今天小編就為大家分享一篇python腳本執(zhí)行CMD命令并返回結(jié)果的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • Python實(shí)現(xiàn)合并兩個(gè)有序鏈表的方法示例

    Python實(shí)現(xiàn)合并兩個(gè)有序鏈表的方法示例

    這篇文章主要介紹了Python實(shí)現(xiàn)合并兩個(gè)有序鏈表的方法,涉及Python操作鏈表節(jié)點(diǎn)的遍歷、判斷、添加等相關(guān)操作技巧,需要的朋友可以參考下
    2019-01-01
  • Python如何使用__slots__實(shí)現(xiàn)節(jié)省內(nèi)存和性能優(yōu)化

    Python如何使用__slots__實(shí)現(xiàn)節(jié)省內(nèi)存和性能優(yōu)化

    你有想過(guò),一個(gè)小小的 __slots__ 能讓你的 Python 類內(nèi)存消耗直接減半嗎,沒(méi)錯(cuò),今天咱們要聊的就是這個(gè)讓人眼前一亮的技巧,感興趣的小伙伴可以了解下
    2025-03-03
  • Django中使用group_by的方法

    Django中使用group_by的方法

    這篇文章主要介紹了Django中使用group_by的方法,實(shí)例分析了在Django中使用group_by語(yǔ)句的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • python常用模塊詳解

    python常用模塊詳解

    今天小編就為大家分享一篇關(guān)于舉例講解Python常用模塊,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2021-10-10
  • python遞歸算法(無(wú)限遞歸,正常遞歸,階乘)

    python遞歸算法(無(wú)限遞歸,正常遞歸,階乘)

    本文主要介紹了python遞歸算法,包含無(wú)限遞歸,正常遞歸,階乘等,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-02-02

最新評(píng)論

崇仁县| 个旧市| 昌吉市| 衡水市| 晴隆县| 南开区| 新邵县| 江都市| 防城港市| 阳信县| 乌恰县| 江源县| 新干县| 阳山县| 沾益县| 景东| 尚志市| 平武县| 桂阳县| 泰安市| 光泽县| 涡阳县| 德化县| 辽阳市| 泾源县| 米泉市| 安丘市| 浦县| 琼中| 通海县| 洮南市| 仪陇县| 阳城县| 龙岩市| 雷山县| 南通市| 嘉义县| 汕头市| 纳雍县| 鄂温| 杭州市|