banner
朝闻道

朝闻道

做个知行合一的人
email

Python正則表達式pattern分類

網上的相關資料非常多,但都很亂。於是我做了個分類,一來自己方便查看,二來看到此文章的同仁也能省去些麻煩。

提示:正則表達式中的 pattern 參數通常都包含反斜線,為了防止它們被識別為轉義字符,最好使用原始字符串 r'' 來表示它們。(如 r'\t',等價於 \\t ) 匹配相應的特殊字符。

使用原始字符串的優點是可以少寫\號,代碼閱讀起來也更容易些。

正則表達式四大功能:匹配 (bool 值)、獲取、替換、分割。

匹配單個字符#

  • . :表示任意一個字符。如表達式't.o'too'two'都符合條件。
  • [...]:匹配 [] 中列舉的所有字符中的一個
    • 一個 [] 表示一個字符:[amk] 匹配 'a','m' 或 'k'。[a-zA-Z0-9]表示所有字母 + 數字。[A-Z][a-z]表示第一個字符為大寫字母,第二個字符為小寫字符,即兩個字符。
    • 注意無需使用 , 分割內容,[0-35-9] 表示 0~3 與 5~9。
    • 可以用 - 給出範圍。如 [abc][a-c] 含義相同。
  • [^...]:不在 [] 中的字符中的一個
    • [^abc] 匹配除了 a,b,c 之外的字符。

匹配單個字符 —— 它們可以寫在字符集 [] 中#

  • \w: 匹配數字字母下劃線。等價於[a-zA-Z0-9_],在 Unicode 字符中還可以匹配漢字、全角數字。
  • \W:匹配非數字字母下劃線,等價於[^A-Za-z0-9_]
  • \s:匹配任意空白字符、空格、tab 鍵。等價於[\t\n\r\f]
  • \S:匹配任意非空字符,等價於[^\t\n\r\f]
  • \d:匹配任意數字,等價於 [0-9]
  • \D:匹配任意非數字,等價於[^0-9]

匹配多個字符#

  • *:匹配 * 號前一個字符出現至少 0 次的表達式。如表達式abc*,匹配值ababccc
  • +:匹配前⼀個字符出現 1 次或者⽆限次。如表達式abc+,匹配值abcabccc
  • ?:匹配前⼀個字符出現 1 次或者 0 次,即要么有 1 次,要么沒有。非貪婪。
  • {m}:匹配前⼀個字符出現 m 次。如表達式ab{2}c,匹配值abbc
  • {m,}:匹配前面表達式至少 m 次
  • {,n}:匹配前面的正則表達式最多 n 次
  • {m,n}:匹配前⼀個字符出現至少 m 至多 n 次。如表達式ab{1,3}c,匹配值abcabbcabbbc

特殊匹配#

  • | :匹配左右任意一個表達式。如匹配 0-100 之間的數字,表達式re.match(r'[1-9]?\d$|100',string)
  • ():匹配括號內的表達式,也可表示一個組 (整體),組與組之間聯合使用。可以和|搭配,如識別郵箱時(163|126|qq)
  • \b:匹配單詞邊界。
    • \b是零寬度不占字符的,它是一個邊界線的存在,在\b的左右兩側,要求一個是\w,一個是\W
    • 也就是用於匹配處在邊界的字符,比如\bhe可以匹配 "he" 但不能匹配 "where"。
    • \bman\b可以匹配 "I am a man, not a woman" 中的man,而不會匹配woman;但man\b會匹配出manwoman,因為後者的 "man" 也處在邊界,使用時要注意。
  • \B:匹配非單詞邊界。
    • \b相反,這樣理解:在\B的左右兩側,要么全是\w,要么全是\W
    • py=\B可以匹配 "py==" 中的 "py=",但不能匹配 "py=1" 中的 "py="。
  • \n,\t,等:匹配一個換行符,匹配一個制表符,等。

位置類#

  • ^:匹配字符串的開頭。
  • $:匹配字符串的末尾。
  • \A:匹配字符串開始。
  • \Z:匹配字符串結束,如果是存在換行,只匹配到換行前的結束字符串。
  • \z:匹配字符串結束。
  • \G:匹配最後匹配完成的位置。

實例#

  • [Pp] ython:匹配 "Python" 或 "python"
  • rub [ye]:匹配 "ruby" 或 "rube"
  • [aeiou]:匹配中括號內的任意一個字母
  • [0-9]:匹配任何數字。類似於 [0123456789]
  • [a-z]:匹配任何小寫字母
  • [A-Z]:匹配任何大寫字母
  • [a-zA-Z0-9]:匹配任何字母及數字
  • [^aeiou]:除了 aeiou 字母以外的所有字符
  • [^0-9]:匹配除了數字外的字符

*:星號。匹配前一個字符 0 到 n 次,如'pytho\*n'可以匹配 pythn、pythoon、pythooooon 等。還有其它匹配重複字符的如?、+ 或 {m,n},其中 {n,m} 可以靈活使用,它表示匹配 n 次到 m 次。

\b 的用法也可以很靈活,在給定的字符串中,找到以小寫字母開頭的單詞。

ss = "i Am a gOod boy  baby!!"
result=re.findall(r'\b[a-z][a-zA-Z]*\b',ss)
print(result)
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。