匹配ip地址html
參考 http://blog.chinaunix.net/uid-108431-id-3350731.html正則表達式
http://blog.csdn.net/liangyuannao/article/details/8755325api
第一步:地址分析,正則初判 網絡
第三步:進一步合併函數
能夠進一步合併爲:測試
r = r'((([1-9]?|1\d)\d|2([0-4]\d|5[0-5]))\.){3}(([1-9]?|1\d)\d|2([0-4]\d|5[0-5]))'ui
通過測試發現ip地址帶有別的字符串過濾會有問題url
經改後爲spa
r='((?:(?:(?:[1-9]?|1\d)\d|2(?:[0-4]\d|5[0-5]))\.){3}(?:[2-9]|(?:[1-9]|1\d)\d|2(?:[0-4]\d|5[0-4])))\D'.net
re.findall(r,s)
注意:
內建函數,
abs()取絕對值 max()min()
divmod(x,y) 返回求模後的商和餘數 callable(函數)判斷函數是否可被調用
isinstance(x,y)判斷類型
str.capitalize() 字符串首字母大寫
str.replace() 字符串替換 這個是具體替換,模糊替換查看sub()
string.replace(s,old,new)須要導入string模塊
filter(函數,序列)函數做用於序列,可用於序列過濾
正則表達
r1 = r"\d{3,4}-?"
編譯正則表達爲對象
re_tel=re.compile(r1)
這樣就能夠當作對象進行調用re的方法
re_tel.findall('字符串')返回列表
匹配不區分大小寫
re_tel=re.compile(r1,re.I)re.I 調用re的屬性表示不區分大小寫
match()匹配的對象是否在字符串的開始位置,返回一個對象,通常能夠把返回值給一個變量,看這個變量是否爲none,
search() 匹配字符串不管在任何位置,也是返回對象
finditer() 匹配後返回一個對象可迭代器,能夠經過next()方法查看,其返回也是一個對象,若果想看到其值,就能夠掉用方法group()
相似於group()的方法還有
start() 返回匹配開始的的位置
end 返回匹配結束的位置
span 返回一個元祖,包含(開始,結束)
sub是截取字符串,可是支持多個分隔符
sub(正則,'替換對象',原始字符串) 這個是模糊替換
re.split(正則,字符串)支持多個分隔符,且支持正則表達
r1=r"[\+\-\*]"
re.split(r1,s)以+,_,*,三個字符串做爲分隔符
正則表達裏面常常用到的屬性
re.S 使 . 匹配包含換行在內的全部字符 re.findall(r1,字符串,re.S)
re.I 使匹配不區分大小寫
re.M 多行匹配,影響^ 和$,同時多行的匹配,若是正則表達式是多行的話,也要加這個屬性
re.X可以使用REs的verbose狀態是指被組織的更清晰易懂
正則表達式分組
email = r "\w{3}@\w+(\.com|\.cn)"
re.match(email,'zzz@sun.com') 匹配到了會返回一個對象
re.findall(email,zzz@sun.com) 返回的是匹配到的分組字符串[.com]
若是咱們有一個字符串s=''' sdf hello sun=westos t43
wefs sun=no t43 sdf
hello sun=ni t43 sddsf'''
r1=r"hello sun=.+ t43"
re.findall(r1,s) 返回的匹配到的全部數據 ['hello sun=westos t43','hello sun=ni t43']
若是咱們作分組處理
r1=r"hello sun=(.+) t43"
re.findall(r1,s) 返回的優先是分組中的數據,就是匹配到分組的數據 ['westos','ni']
match也能夠匹配
這個能夠用到網絡的爬蟲,獲取咱們想獲取的url或者ip