【python技巧】文字處理-re庫字元匹配

CrazyPixel發表於2023-09-19


我們讀取檔案內容,肯定不是單純為了輸出或者重新寫入,對於文字我們一定有一些查詢、定位的需求。
在Python中,還有一個專門用於文字處理的庫,那就是re庫。
下面我會介紹re庫涉及的正規表示式的基本知識。
參考課程

1. 正規表示式

正規表示式是用來進行字串匹配的一個字元形式。

1.1 測試工具

常見的正規表示式測試工具有:

  1. regex101
  2. 程式碼編輯器搜尋欄的正規表示式匹配

1.2 限定符

  1. ?
    abc?表示字元c需要出現0次或者1次,或者換句話說,字元c至多出現一次。也就是說,abc?相當於abcab這兩個字串。

  2. *
    ab*c表示字元b需要出現0次或者多次,或者換句話說,字元b可以出現任意多次。也就是說,ab*c相當於acabcabbcab……bc等多個字串。

  3. +
    ab+c表示字元b需要出現1次或者多次,或者換句話說,字元b至少出現一次。也就是說,ab+c相當於abcabbcab……bc等多個字串。
    注意ab*cab+c的細微區別。

  4. {}

  • {num}
    ab{3}c表示字元b需要出現3次,或者換句話說,字元b只能出現2次。也就是說,ab{2}c相當於abbc這一個字串。

  • {num1,num2}
    ab{2,5}c表示字元b需要出現2或3或4或5次,也就是說,ab{2,5}c相當於abbcabbbcabbbbcabbbbbc這四個字串。

  • {num,}
    ab{2,}c表示字元b需要出現2次及以上,也就說,ab{2,}c相當於abbcabbbcabbbbcab……bc等無數個字串。

1.3 字符集

在正常情況下,上述的限定符只會對其前面的一個字元起作用。如果想要某個字串作為一個組合,可以使用字符集。
(ab)+c表示字串ab需要出現1次或者多次,或者換句話說,字串ab至少出現一次。也就是說,(ab)+c相當於abcababcabababcab……abc等多個字串。

1.4 運算子

  1. |
    a(b|d)c表示字串b出現1次或者字串d出現1次,也就是說,a(b|d)c相當於abcadc這兩個字串。

    a(boy|girl)c也同樣適用,相當於aboyc或者agirlc這兩個字元。

  2. []
    []表示匹配字元能選擇的範圍,成為字元類,例如,[abc]+只會匹配a\b\c這三個字母出現一次或多次的字串,而一般更經常使用的是[a-zA-Z0-9]*表示由大小寫字母和數字組成的字串,[a-zA-Z0-9_]*表示由大小寫字母、數字和下劃線組成的字串。

  3. ^
    ^表示取反字元類,也就是說,[^a-zA-Z0-9]*表示除了大小寫字母、數字符號以外的其他字元出現一次或多次的字串。

  4. \
    \.表示轉置,把一些有特殊意義的字元轉變為實際字元

  5. \b
    \b表示字元邊界

1.5 元字元

  1. \d數字字元
    1. \D非數字字元
  2. \w單詞字元,包括英文字母、數字、下劃線
    1. \W非單詞字元
  3. \s空白字元,包括空格、製表符、換行符
    1. \S非空白字元
  4. .任意字元,不包含換行符
  5. ^匹配字串的開頭,例如^a匹配行首的a
  6. $匹配字串的結尾,例如x$匹配行尾的x

1.6 懶惰匹配和貪婪匹配

  1. 貪婪匹配
    預設匹配儘可能多的字元。
  2. 懶惰匹配
    例子:<.+>匹配<>之間的任意字元,而<.+?>則會使用懶惰匹配

相關文章