python學習2正則表達

匹配ip地址html

參考 http://blog.chinaunix.net/uid-108431-id-3350731.html正則表達式

http://blog.csdn.net/liangyuannao/article/details/8755325api

第一步:地址分析,正則初判 網絡

  1. 一、0-9 \d 進行匹配
  2. 二、10-99 [1-9]\d 進行匹配
  3. 二、100-199 1\d\d 進行匹配
  4. 三、200-249 2[0-4]\d 進行匹配
  5. 四、250-255 25[0-5] 進行匹配
  1. 基本表達式能夠合併爲:       \d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]
  2. 前三部分正則表達式合併爲:   ((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}
  3. 前三部分加上最後一部分合併爲:((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])

第三步:進一步合併函數

 

能夠進一步合併爲:測試

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)

注意:

  1. 該正則表達式有兩個缺陷:
  2. 0.0.0.0不能判斷
  3. 255.255.255.255不能正確判斷
  4. 這個問題須要使用其餘代碼進行輔助解決

內建函數,

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                          

相關文章
相關標籤/搜索