正則表達式
總結自北理工網絡公開課《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])