正規表達式(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']