正則表達式對比工具正則表達式
https://pan.baidu.com/s/1XIPyF1vFSj5PACPx9zW8_g函數
(一) 正則表達式符號和特殊字符工具
符號測試 |
說明spa |
示例3d |
|code |
或對象 |
re1|re2,匹配re1或re2blog |
.ci |
匹配任何字符(\n除外) |
|
^ |
匹配字符串開始部分 |
^ab.* 以ab開始的字符串,匹配ab12三、ababc等等 |
$ |
匹配字符串結束部分 |
.*123$ 以123結束的字符串,匹配ab12三、測試123等等 |
* |
匹配0次或屢次前面的正則表達式 |
.* 匹配0次或屢次前面的 . |
+ |
匹配1次或屢次前面的正則表達式 |
|
? |
匹配0次或1次前面的正則表達式 |
|
{n} |
匹配n次前面的正則表達式 |
.{5}
|
{m,n} |
匹配M到N次前面的正則表達式 |
.{1,10}
|
[…] |
匹配[]裏的任一字符 |
[abc]d 匹配 ad、bd、cd |
[x-y] |
匹配範圍內的任一字符 |
[a-c]d:匹配 ad、bd、cd [0-9]d:匹配0d、1d、2d、3d等 |
[^…] |
不匹配[]裏的任一字符 |
[^a-c]d: 不匹配 ad、bd、cd
|
(…) |
將正則表達式封閉爲一個組 |
例如:[a-b][a-b] :只匹配aa、ab等 ([a-b][a-b])+:匹配aaaa、abab等.另外能夠用這個()來提取數據 |
符號 |
說明 |
示例 |
\d |
匹配任一數字,和[0-9]是同樣的,\D則不匹配任何數字 |
A\d: 匹配A一、A2等 |
\w
|
匹配任一數字、字母,和[A-Za-z0-9]是同樣的,\W則相反 |
|
\s
|
匹配任一空格字符,\S 則相反 |
hello\sword:匹配hello word |
\.. |
將\後一個字符按字面意義匹配,不匹配特殊含義 |
\?:匹配? \\d:匹配\d |
\b
|
匹配任何單詞邊界(\B 則相反) |
例如:字符串 ab the Htherr the: 能匹配到2個 the \bthe\b:只匹配第一個 the \Bthe\B:只匹配第二個 the |
\A
|
匹配字符串開始部分,\Z 則字符串結束部分 |
參照^ 和$ |
(二) 貪婪模式和非貪婪模式
貪婪模式:儘量的匹配
非貪婪模式:匹配到第一個結果後就結束匹配。在*、+、?、{}後面加一個?就是非貪婪模式。(*|+|?|{})?
看下面2張圖就清楚了(藍色背景表示匹配的內容)
第一張圖(貪婪模式):匹配到第一</div>後還會繼續向右匹配。(在內容和正則表達式匹配的狀況下,儘量的匹配最長字符串)
第二張圖(非貪婪模式):匹配到第一個</div>後就結束匹配了。(在內容和正則表達式匹配的狀況下,匹配到第一個結果後就結束匹配)
(三) re模塊
函數/方法 |
說明 |
re.compile(pattern, flags=0) |
(預編譯)將正則表達式編譯爲對象(不是必須的,不過通常是會預編譯) 實際應用中:下面2種方式都是能夠用的 the_str='' 第一: 第二: 第一種是調用正則表達式對象的match()方法。 第二種寫法是調用re模塊的match()函數 |
match(pattern, string) |
Pattern:正則表達式 String:字符串 匹配成功,返回字符串,失敗則返回None。 預編譯後的正則表達式對象則只須要傳str就好了(由於它自己就是pattern對象) |
search(pattern, string) |
Pattern:正則表達式 String:字符串 返回第一個匹配內容,沒有匹配則返回None |
findall(pattern, string)
|
以列表形式返回全部匹配的內容 |
finditer(pattern, string) |
返回全部匹配的內容,以迭代器的形式 |
split(pattern, string) |
Pattern匹配的內容做爲分隔符,split將字符串分割爲列表並返回 |
flags參數 |
說明 |
re.I re.IGNORECASE
|
不區分大小寫 |
re.M re.MULTILINE |
匹配行的開始和結束部分,而不是嚴格匹配字符串自己的開始、結束部分 |
re.S re.DOTALL)
|
讓. (點號)能夠匹配\n |
使用flags參數的時候,不清楚傳第幾個參數的話,最好先去看下方法(函數)的實現代碼。或者直接指定(flags= xxx)
(四) re模塊示例
1 import re 2 the_str='<div id="hd_info"></div></div></div>' 3 href_regx= re.compile('<div.*</div>') 4 print('match()示例:',href_regx.match(the_str)) 5 print('match()示例:',re.match('<div.*</div>',the_str)) 6 print('search()示例:',re.search('/div>',the_str)) 7 8 print('findall()示例:',re.findall('/div>',the_str)) 9 print('finditer()示例:',re.finditer('/div>',the_str)) 10 for i in re.finditer('/div>',the_str): 11 print('迭代finditer()返回值:',i) 12 13 print('split()示例:',re.split('/.',the_str,re.DOTALL))
(五) 正則表達式實際應用
匹配電信手機號
正則表達式:1(39|49|53|[7][37]|[8][019]|99)[0-9]{8}
匹配a標籤開始 href屬性值 (<a href='' )