1. 規則
1. 比對字元
- . 比對任意一個字元
- [] 比對[]中列舉的字元
- \d 比對數字
- \D 比對非數字
- \s 比對空白
- \S 比對非空白
- \w 比對配單詞(a-z, A-Z, 1-9)
- \W 比對非單詞
2. 比對數量
-
-
- ? 比對前一個字元出現0次或者1次,(要麼一次, 要麼沒有) # 注意: 如果?前面是跟的數量,則是取消貪婪
- {m} 比對前一個字元出現m次, 出現
- {m,} 比對前一個字元至少出現m次, 至少出現
- {m, n} 比對前一個字元出現 m到n次
4. 比對分組
- | 比對左右任意一個表達式
- (ab) 将括号中字元作為一個分組
- \num 引用分組num比對到的字元串
- (?) 分組起别名
- (?P=name) 引用别名為name分組比對到的字元串
3. 比對邊界
- ^ 比對開頭
- $ 比對結尾
- \b 比對單詞邊界
- \B 比對非單詞邊界
4. re子產品中的比對方法
- match: 嘗試從字元串的起始位置比對一個模式, 比對成功傳回的是一個比對對象(這個對象包含了我們比對的資訊), 如果不是起始位置比對成功的話, match()傳回的是空 (隻比對一個)
- search: 掃描整個字元串, 比對成功傳回的是一個比對對象 (search也隻能比對到一個, 找到符合規則的就傳回, 不會一直往後找) (與match,類似, 但search查找整個字元串)
- findall: 在字元串中找到正規表達式所比對的所有子串, 并傳回一個清單,如果沒有找到比對的, 則傳回一個空清單
import re
# re.match() # match方法,本身就是從開頭處開始比對, 是以說加不加 ^(從頭開始比對) 沒有什麼影響
res = re.match(r\'1[345678]\d{9}\', \'14777583048\') # 比對電話号碼
res = re.match(r\'[1, 9]\d?$|1$|100$\', \'\') # 比對0到100 , 并且不能以0開頭
res = re.match(r\'[1, 9]?\d?$|100$\', \'\') # 改進, 把0整合進前面的比對過程中
# 比對郵箱
p = r\'(\w+)@(qq|163|126)\.(com|cn|net))\' # 比對規則
res = re.match(p, \'[email protected]\')
print(res.group()) # [email protected]
# 2. match
res3 = re.match(r\'python\', \'ipython\')
print(res3) # None
# 3. search
res4 = re.search(r\'python\', \'ipython\')
print(res4)
print(res4.group())