天天看點

python中的正則比對, 其他語言比對規則類似

1. 規則

1. 比對字元

  1. . 比對任意一個字元
  2. [] 比對[]中列舉的字元
  3. \d 比對數字
  4. \D 比對非數字
  5. \s 比對空白
  6. \S 比對非空白
  7. \w 比對配單詞(a-z, A-Z, 1-9)
  8. \W 比對非單詞

2. 比對數量

    • 比對前一個字元出現0到多次
    • 比對前一個字元至少出現一次
  1. ? 比對前一個字元出現0次或者1次,(要麼一次, 要麼沒有) # 注意: 如果?前面是跟的數量,則是取消貪婪
  2. {m} 比對前一個字元出現m次, 出現
  3. {m,} 比對前一個字元至少出現m次, 至少出現
  4. {m, n} 比對前一個字元出現 m到n次

4. 比對分組

  1. | 比對左右任意一個表達式
  2. (ab) 将括号中字元作為一個分組
  3. \num 引用分組num比對到的字元串
  4. (?) 分組起别名
  5. (?P=name) 引用别名為name分組比對到的字元串

3. 比對邊界

  1. ^ 比對開頭
  2. $ 比對結尾
  3. \b 比對單詞邊界
  4. \B 比對非單詞邊界

4. re子產品中的比對方法

  1. match: 嘗試從字元串的起始位置比對一個模式, 比對成功傳回的是一個比對對象(這個對象包含了我們比對的資訊), 如果不是起始位置比對成功的話, match()傳回的是空 (隻比對一個)
  2. search: 掃描整個字元串, 比對成功傳回的是一個比對對象 (search也隻能比對到一個, 找到符合規則的就傳回, 不會一直往後找) (與match,類似, 但search查找整個字元串)
  3. 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())