正則表達式re模塊
正則表達式(RE)為高級文本模式匹配,以及搜索-替代等功能提供了基礎。正則表達式(RE)是一 些由字符和特殊符號組成的字符串,它們描述了這些字符和字符的某種重復方式,因此能按某種模 式匹配一個有相似特征的字符串的集合,因此能按某模式匹配一系列有相似特征的字符串 。
在 Python 專門術語中,有兩種主要方法完成模式匹配:搜索(searching)和匹配(matching)。搜索,即在字符 串任意部分中查找匹配的模式,而匹配是指,判斷一個字符串能否從起始處全部或部分的匹配某個 模式。搜索通過 search()函數或方法來實現,而匹配是以調用 match()函數或方法實現的。
下面為常用的匹配符合:
元字符 | 說明 |
---|---|
. | 代表任意字符 |
| | 邏輯或操作符 |
[ ] | 匹配內部的任一字符或子表達式 |
[^] | 對字符集和取非 |
- | 定義一個區間 |
\ | 對下一字符取非(通常是普通變特殊,特殊變普通) |
* | 匹配前面的字符或者子表達式0次或多次 |
*? | 惰性匹配上一個 |
+ | 匹配前一個字符或子表達式一次或多次 |
+? | 惰性匹配上一個 |
? | 匹配前一個字符或子表達式0次或1次重復 |
{n} | 匹配前一個字符或子表達式 |
{m,n} | 匹配前一個字符或子表達式至少m次至多n次 |
{n,} | 匹配前一個字符或者子表達式至少n次 |
{n,}? | 前一個的惰性匹配 |
^ | 匹配字符串的開頭 |
\A | 匹配字符串開頭 |
$ | 匹配字符串結束 |
[\b] | 退格字符 |
\c | 匹配一個控制字符 |
\d | 匹配任意數字 |
\D | 匹配數字以外的字符 |
\t | 匹配制表符 |
\w | 匹配任意數字字母下劃線 |
\W | 不匹配數字字母下劃線 |
常用的寫法:
‘[a-zA-Z0-9]‘:匹配字母或數字
‘[^abc]‘:匹配除abc之外的字母
‘p(ython|erl)‘匹配Python和perl
‘(pattern)*‘匹配0次或多次
‘(pattern)+‘匹配1次或多次
‘(pattern){m,n}‘匹配m_n次
‘(a|b)*c‘匹配0-n次a或b後面緊跟c
‘^[a-zA-Z]{1}([a-zA-Z0-9\._]){4,19}$‘匹配20個字符以字母開始
‘^(\w){6,20}$‘匹配6-20個單詞字符
‘^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$‘匹配IP
‘^[a-zA-Z]+$‘檢查字符中只包含英文字母
‘\w+@(\w+\.)\w+$‘匹配郵箱
‘[\u4e00-\u9fa5]‘匹配漢字
‘^\d{18|\d{15}$‘匹配身份證
‘\d{4}-\d{1,2}-\d{1,2}‘匹配時間
‘^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[,._]).{8,}$)‘判斷是否為強密碼
‘(.)\\1+‘匹配任意字符的一次或多次出現
# --*-- coding=utf-8--*-- import re # 導入re庫 ptn = re.compile(r‘hello‘) # 使用ptn作為文本匹配 m1 = ptn.match(‘hello world‘) m2 = ptn.match(‘‘) print(m1) print(m2) # 如果匹配到返回結果,匹配不到返回None # m1結果:<_sre.SRE_Match object; span=(0, 5), match=‘hello‘> # m2結果:None # ‘^ab+‘表示匹配以ab開頭的字符串 m1 = re.search(‘^ab+‘, ‘asbfrfgbbbb‘) m2 = re.search(‘^ab+‘, ‘absffdf‘) print(m1) print(m2.group()) # group分組顯示 # m1結果:None # m2結果:‘ab‘ # findall匹配所有符合的結果 m = re.findall(‘hello‘, ‘helloword, ddddhellossss‘) print(m) # 結果:[‘hello‘, ‘hello‘] # finditer # 與findall類似,只不過返回的結果是一個叠代器,而findall返回的是列表 # start返回匹配的開始位置 # end返回匹配的結束位置 m = re.search(‘^ab+‘, ‘absffdf‘) print(m.start(),m.end()) # 結果:0 2 # sub用於替換字符串中的匹配項 m = re.sub(‘ ‘,‘+‘,‘This is handsome boy‘) print(m) # 結果:This+is+handsome+boy # split分割 m = re.split(‘ ‘,‘This is handsome boy‘) print(m) # 結果:[‘This‘, ‘is‘, ‘handsome‘, ‘boy‘]
正則表達式re模塊