在幫朋友解決這個(gè)問(wèn)題后,隨便記錄一下這三種方法:
第一種方法:使用正則表達(dá)式:
因?yàn)楫?dāng)時(shí)的要求是判定10.0.0.1 到 10.255.255.255,原理其實(shí)是一樣。這里簡(jiǎn)單回顧一下正則表達(dá)式模式的內(nèi)容:
常見(jiàn)的如:
\d 可以表示0~9的任意一個(gè)數(shù)字字符而\D是匹配一個(gè)非數(shù)字字符等價(jià)于^ ^是匹配字符串的開(kāi)頭,但放在[]中表示匹配不在[]中的字符
$是匹配字符串的末尾
.是匹配除了換行符任意字符
{}表示重復(fù)幾次,例如:^a{2,4} $ aa,aaa或aaaa
| 的是或的意思
[]表示匹配括號(hào)里面的給出內(nèi)容像[aeiou]則匹配中括號(hào)內(nèi)的任意一個(gè)字母,注意一個(gè)中括號(hào)只對(duì)應(yīng)一個(gè)位置,例如[Pp]ython是匹配 “Python” 或 “python”,而rub[ye]則匹配 “ruby” 或 “rube”。同理[a-z]是匹配任何小寫(xiě)字母,復(fù)雜一點(diǎn)的如^ [a-zA-Z_] $是匹配所有的字母和下劃線。
\是轉(zhuǎn)義字符,更方便使用在字符串前面加r表示原生字符串解決反斜杠困擾
然后收集了一些可能使用的:
數(shù)字:^ [0-9]* $
n位的數(shù)字:^ \d{n} $
漢字:^ [ \u4e00-\u9fa5]{0,}$
英文和數(shù)字:^ [A-Za-z0-9]+$ 或 ^ [A-Za-z0-9]{4,40}$
Email地址:^\w+([-+.]\w+)
@\w+([-.]\w+)
.\w+([-.]\w+)*$
域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
IP地址:((?: (?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d?\d)) 或 ^(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9]).(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d).(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d).(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)$
其中:
1\d{2}的意思就是100~199之間的任意一個(gè)數(shù)字
2[0-4]\d的意思是200~249之間的任意一個(gè)數(shù)字
25[0-5]的意思是250~255之間的任意一個(gè)數(shù)字
[1-9]\d的意思是10~99之間的任意一個(gè)數(shù)字
[1-9])的意思是1~9之間的任意一個(gè)數(shù)字
import re
def check_ip(ipAddr):
compile_ip = re.compile('^(10)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)')
if compile_ip.match(ipAddr):
return True
else:
return False
第二種方法:字符串拆解
主要是采用Python中的split()方法通過(guò)指定分隔符對(duì)字符串進(jìn)行切片,如果參數(shù)num有指定值,則分隔 num+1 個(gè)子字符串
split()方法語(yǔ)法:str.split(str="", num=string.count(str)).
str – 分隔符,默認(rèn)為所有的空字符,包括空格、換行(\n)、制表符(\t)等。
num – 分割次數(shù)。默認(rèn)為 -1, 即分隔所有。
返回值是返回分割后的字符串列表。
#!/usr/bin/python
import sys
def check_ip(ipAddr):
addr = ipAddr.strip().split('.')
for i in range(4):
try:
addr[i] = int(addr[i])
except:
print("check ip address failed!")
sys.exit()
if 255 >= addr[i] >= 0:
pass
else:
print("check ip address failed!")
sys.exit()
i += 1
else:
print("check ip address success!")
第三種方法:使用IPy庫(kù)
一個(gè)專門處理IP的第三方庫(kù),需要自行安裝:
import IPy
def check_ip(ipAddr):
try:
IPy.IP(address)
return True
except Exception as e:
return False
總結(jié):
總的來(lái)說(shuō)初學(xué)者使用字符串拆解比較簡(jiǎn)單,也容易理解。正則表達(dá)式功能強(qiáng)大但是相對(duì)復(fù)雜在寫(xiě)的時(shí)候很容易犯錯(cuò),所以在爬蟲(chóng)中使用相對(duì)較少了,最后的直接使用第三方庫(kù)算是比較方便的方式。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
