1. 程式人生 > >Python正則表示式中的常用符號

Python正則表示式中的常用符號

Python正則表示式中常用的符號

簡介

正則表示式之所以叫做正則表示式,是因為他們可以識別正則字串;源字一本書中的定義是:“如果你給我的字串符合規則,我就返回它”,或者是“如果字串不符合規則,我就忽略它”。Python正則表示式在編寫網路爬蟲程式碼時使用可能會極大提高效率。
其實正則表示式上手一點也不難,而且執行很快,通過一些簡單的例子就可以輕鬆地學會。下面通過對一個郵箱地址的識別來幫助學習理解正則表示式:

規則 正則表示式
1.郵箱地址的第一部分至少包括一種內容:大寫字母、小寫字母、數字0-9、點號(.)、加號(+)或下劃線(_) [A-Za-z0-9._+]+:這個正則表示式簡寫表達的很好,它用”A-Z”表示“任意A~Z的大寫字母”。把所有可能的序列和符號放在中括號(不是小括號)裡表示“括號中的符號裡任何一個”。要注意後面的加號,它表示“這些符號都可以出現多次,且至少出現一次”
2.之後,郵箱地址會包含一個@符號 @:這個符號很直接。@符號必須出現在中間位置,有且僅有一次
3.在符合@之後,郵箱地址還必須至少包含一個大寫或小寫字母 [A-Za-z]+:可能只在域名的前半部分、符號@後面用字母。而且,至少有一個字母
4.之後跟一個點號(.) \.:在域名前必須有一個點號(.)
5.最後郵箱地址用com、org、edu、net結尾(實際上,頂級域名有很多種可能,但是作為展示這四個就夠了) (com|org|edu|net):這樣列出了郵箱地址中可能出現在點號之後的字母序列

常用符號

所以現在我們把上述的規則連線起來,就或者了完整的驗證郵箱地址的正則表示式:

[A-Za-z0-9._+][email protected][A-Za-z]+.(com|org|edu|net)

下面的表格總結了在Python的正則字串中最常用的,可以用來查詢和收集絕大多數資料型別。

符號 含義 例子 匹配結果
* 匹配前面的字元、子表示式或括號裡的字元0次或多次 a*b* aaaaaa,aabbbbb,bbbbbb
+ 匹配前面的字元、子表示式或括號裡的字元至少1次 a+b+ aaaaab、aaabbbbb、abbbbbb
[] 匹配任意一個字元(相當於任選一個) [A-Z]* APPLE,CAPSDF,QEFEFC
() 表示式編組(在正則表示式的規則裡編組會優先執行) (a*b)* aaabaab,abaaab,ababaaab
{m,n} 匹配前面的字元、子表示式或括號裡的字元m到n次(包含m或n) a{2,3}b{2,3} aabbb,aaabbb,aabb
[^] 匹配任意一個不在中括號裡的字元 [^A-Z]* apple,lowercase,beauty
| 匹配任意一個由豎線分割的字元、子表示式(注意是豎線,不是大寫字母I) b(a|c|e)d bad,bcd,bed
. 匹配任意單個字元(包括符號、數字和空格) b.d bad,bzd,b$d,b d
^ 指字串開始位置的字元或子表示式 ^a apple,asdf,a
\ 轉義字元(把有特殊含義的字元轉換成書面形式) \.\|\\ .|\
$ 經常用在正則表示式的末尾,表示“從字串的末端匹配”。如果不用它,每個正則表示式實際都帶著“.*”,只會從字串開頭進行匹配。這個符號可以看成是^符號的反義詞 [A-Z]*[a-z]*$ ACacv,zzzyx,Bob
?! “不包含”。這個奇怪的組合通常放在字元或正則表示式前面,表示字元不能出現在目標字串裡。這個符號比較難用,字元通常會在字串的不同部位出現。如果要在整個字串中全部排除某個字元,就加上^和$符號 ^((?![A-Z]).)*$ no-caps-here,$ymb01s,a4e f!ne

每種語言的正則表示式大致相同,但不完全相同,比如Java和Python在具體使用時還需要檢視相關文件。