字符串前面加r,是raw的意思,它表示對字符串不進行轉義。
print “\bhi”
hiprint r”\bhi”
\bhi
字符 | 含義及用法 |
---|---|
^ | 匹配字符串的開始 |
$ | 匹配字符串的結束 |
| | 相當於or,它連接的兩個表達式,只要滿足其中之一,就會被算作匹配成功。 |
[] | 匹配滿足括號中任一字符 |
. | 匹配除換行符以外的任意字符 |
[^a] | [a]的反義,表示除a以外的任意字符 |
[^abcd] | 匹配abcd以外的任意字符 |
\d | 匹配數字 |
[0-9] | 匹配數字 |
\s | 匹配任意的空白符 |
\w | 匹配字母或數字或下劃線或漢字 |
\b | 匹配單詞開頭或結束的位置 |
\S | 匹配任意不是空白符的字符,其實是\s的反義 |
\W | 匹配任意不是字母,數字,下劃線,漢字的字符 |
\D | 匹配任意非數字的字符 |
\B | 匹配不是單詞開頭或結束的位置 |
重複 | |
* | 字符重複任意長度包括0 |
+ | 字符重複1次或更長 |
{} | 大括號內寫期望的字符重複次數 |
? | 重複零次或一次 |
{n,} | 重複n次或更多次 |
{n,m} | 重複n到m次 |
1.“\b”
“\b”在正則表達式中表示單詞的開頭或結尾,空格、標點、換行都算是單詞的分割。而“\b”自身又不會匹配任何字符,它代表的只是一個位置。
使用“\bhi\b”這個正則表達式,找出‘hi’
使用“\bhi”,找出hi開頭的字符串
2.[]
在正則表達式中,[]表示滿足括號中任一字符
3.re模塊
re.findall(r"hi", text)
re是python裏的正則表達式模塊。findall是其中一個方法,用來按照提供的正則表達式,去匹配文本中的所有符合條件的字符串。返回結果是一個包含所有匹配的list。
4.“.”和“\S”
“.”在正則表達式中表示除換行符以外的任意字符。
在這段文本中:Hi, I am Shirley Hilton. I am his wife.
如果我們用“i.”去匹配,就會得到[‘i,’, ‘ir’, ‘il’, ‘is’, ‘if’]
與“.”類似的一個符號是“\S”,它表示的是不是空白符的任意字符,注意是大寫字符S。
5.“?”和"*"
在很多搜索中,會用“?”表示任意一個字符,”*”表示任意數量連續字符,這種被稱爲通配符。但在正則表達式中,任意字符是用“.”表示,而”*”則不是表示字符,而是表示數量:它表示前面的字符可以重複任意多次(包括0次),只要滿足這樣的條件,都會被表達式匹配上。
結合前面的“.*”,用“I.*e”去匹配,想一下會得到什麼結果?
[‘I am Shirley Hilton. I am his wife’]
也許你會以爲是[‘I am Shirle’, ‘I am his wife’]
這是因爲“*”在匹配時,會匹配儘可能長的結果。如果你想讓他匹配到最短的就停止,需要用“.*?”。如“I.*?e”,就會得到第二種結果。這種匹配方式被稱爲懶惰匹配,而原本儘可能長的方式被稱爲貪婪匹配。
6.匹配數字:如電話號碼等
[0-9]* 或者\d* 表示任一長度的數字,類似的還有[a-zA-Z]的用法。
但要注意的是,*表示的任意長度包括0,也就是沒有數字的空字符也會被匹配出來。
一個與*類似的符號+,表示的則是1個或更長。
所以要匹配出所有的數字串,應當用[0-9]+或者\d+
如果要限定長度,就用{}代替+,大括號裏寫上你想要的長度。比如11位的數字:\d{11}
想要再把第一位限定爲1,就在前面加上1,後面去掉一位:1\d{10}
例子
Q:寫一個匹配以下號碼的正則表達式
(021)88776543
010-55667890
02584453362
0571 66345673
A:(?0\d{2,3}[) -]?\d{7,8}