我們讀取檔案內容,肯定不是單純為了輸出或者重新寫入,對於文字我們一定有一些查詢、定位的需求。
在Python中,還有一個專門用於文字處理的庫,那就是
re
庫。下面我會介紹re庫涉及的正規表示式的基本知識。
參考課程
1. 正規表示式
正規表示式是用來進行字串匹配的一個字元形式。
1.1 測試工具
常見的正規表示式測試工具有:
- regex101
- 程式碼編輯器搜尋欄的正規表示式匹配
1.2 限定符
-
?
abc?
表示字元c
需要出現0次或者1次,或者換句話說,字元c
至多出現一次。也就是說,abc?
相當於abc
和ab
這兩個字串。
-
*
ab*c
表示字元b
需要出現0次或者多次,或者換句話說,字元b
可以出現任意多次。也就是說,ab*c
相當於ac
、abc
、abbc
、ab……bc
等多個字串。
-
+
ab+c
表示字元b
需要出現1次或者多次,或者換句話說,字元b
至少出現一次。也就是說,ab+c
相當於abc
、abbc
、ab……bc
等多個字串。
注意ab*c
和ab+c
的細微區別。
-
{}
-
{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
相當於abbc
、abbbc
、abbbbc
、abbbbbc
這四個字串。
-
{num,}
ab{2,}c
表示字元b
需要出現2次及以上,也就說,ab{2,}c
相當於abbc
、abbbc
、abbbbc
、ab……bc
等無數個字串。
1.3 字符集
在正常情況下,上述的限定符只會對其前面的一個字元起作用。如果想要某個字串作為一個組合,可以使用字符集。
(ab)+c
表示字串ab
需要出現1次或者多次,或者換句話說,字串ab
至少出現一次。也就是說,(ab)+c
相當於abc
、ababc
、abababc
、ab……abc
等多個字串。
1.4 運算子
-
|
a(b|d)c
表示字串b
出現1次或者字串d
出現1次,也就是說,a(b|d)c
相當於abc
、adc
這兩個字串。
a(boy|girl)c
也同樣適用,相當於aboyc
或者agirlc
這兩個字元。
-
[]
[]
表示匹配字元能選擇的範圍,成為字元類,例如,[abc]+
只會匹配a\b\c這三個字母出現一次或多次的字串,而一般更經常使用的是[a-zA-Z0-9]*
表示由大小寫字母和數字組成的字串,[a-zA-Z0-9_]*
表示由大小寫字母、數字和下劃線組成的字串。
-
^
^
表示取反字元類,也就是說,[^a-zA-Z0-9]*
表示除了大小寫字母、數字符號以外的其他字元出現一次或多次的字串。
-
\
\.
表示轉置,把一些有特殊意義的字元轉變為實際字元 -
\b
\b
表示字元邊界
1.5 元字元
\d
數字字元\D
非數字字元
\w
單詞字元,包括英文字母、數字、下劃線\W
非單詞字元
\s
空白字元,包括空格、製表符、換行符\S
非空白字元
.
任意字元,不包含換行符^
匹配字串的開頭,例如^a
匹配行首的a$
匹配字串的結尾,例如x$
匹配行尾的x
1.6 懶惰匹配和貪婪匹配
- 貪婪匹配
預設匹配儘可能多的字元。 - 懶惰匹配
例子:<.+>
匹配<
和>
之間的任意字元,而<.+?>
則會使用懶惰匹配