爬蟲學習——正則表達式與python的re庫使用(一)

正則表達式

總結自北理工網絡公開課《Python網絡爬蟲與信息提取》http://open.163.com/movie/2019/5/8/I/MEEMCM1NP_MEEU4DG8I.html

第二篇總結見https://blog.csdn.net/weixin_42412973/article/details/98662359

一、正則表達式的概念
用來簡潔表達一組字符串的表達式
例如:
'PN'
'PYN'
'PYTN'======>>>正則表達式:P(Y|YT|YTH|YTHO)?N
'PYTHN'
'PYTHON'
'一行勝千言'
在文本處理的應用:
1、表達文本類型的特徵(病毒、入侵等);
2、同時查找或替換一組字符串;
3、匹配字符串的全部或部分;
正則表達式的使用:
1、編譯:
將符合正則表達式語法的字符串轉換成正則表達式特徵
編譯後的特徵與一組字符串對應
編譯前只是符合正則表達式語法的一個字符串

二、正則表達式的語法
字符和操作符構成
-----------------------------------------------------------------------------------------------------------------------
操作符|                         說明                                 |                實例
   .         表示任何單個字符                                    例如‘-’
  [ ]       字符集,對單個字符給出取值範圍           [abc]表示a、b、c,[a-z]表示a到z單個字符
  [^]      非字符集,對單個字符給出排除範圍        [^abc]表示非a或b或c的單個字符
   *         前一個字符0次或無限次擴展                    abc*表示ab、abc、abcc、abccc等
   +        前一個字符1次或無限次擴展                   abc+表示abc、abcc、abccc等
   ?       前一個字符0次或1次擴展                         abc?表示ab、abc
   |         左右表達式任意一個                                 abc|def表示abc、def
  {m}     擴展前一個字符m次                                 ab{2}c表示abbc
{m,n}    擴展前一個字符m至n次(含n)              ab{1,2}表示abc、abbc
   ^        匹配字符串開頭                                     ^abc表示abc且在一個字符串的開頭
   $        匹配字符串結尾                                      abc$表示abc且在一個字符串的結尾
  ( )       分組標記,內部只能使用|操作符             (abc)表示abc,(abc|def)表示abc、def
  \d        數字,等價於[0-9]
  \w        單詞字符,等價於[A-Z a-z 0-9 _]
------------------------------------------------------------------------
實例:
PY[TH]ON=========>'PYTON'、'PYHON'
PY[^TH]?ON=======>'PYON' 'PYaON' 'PYbON' 'PYcON'...
PY{:3}N==========>'PN' 'PYN' 'PYYN' 'PYYYN'

經典實例
^[A-Za-z]+$         由26個字母和數字組成的字符串
^[A-Za-z0-9]+$      由26個字母和數字組成的字符串
^-?\d+$             整數形式的字符串’-’負號
[1-9]\d{5}          中國境內郵政編碼,6位
[\u4e00-\u9fa5]     匹配中文字符,判斷字符串是否屬於中文
\d{3}-\d{8}|\d{4}-d{7}  國內電話號碼,010-68913536

設計匹配IP地址的正則表達式
(IP地址分四段,每段0-255)
》   \d+.\d+.\d+.\d+
》   \d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}
》   精確寫法:
0-99:[1-9]?\d   100-199:1\d{2}
200-249:2[0-4]\d    250-255:25[0-5]
====>(([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5]).){3}([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章