Introduction 介紹正規表示式
正規表示式 Regular expression (REs, reges, reges patterns) 被用以在 string 中找 pattern。
(更務實的理解是用匹配詞 (pattern) 在文 (string) 中找出特定字。做為 python 使用者,在 import re 後,對 re 提供的各函式提供 pattern,也就是符合正規表示式文法的 regular expression。對 re 來說,pattern 字串編譯成 pattern object 後才有搜尋作用)
Simple Patterns 簡易匹配詞
Matching Characters
- 方框內的任一字元都可找出
- 比如 [abc] ,表示可找出 a 或 b 或 c 。
- 連續性的字元集,比如 [abc] ,可用 '-' 表示連續性,表示為 [a-c] 。小寫英文字母常以 [a-z] 表示。
- 匹配元在方框內也可以當成普通字元用。比如 [akm$] ,錢字號$是匹配元,作用為置後,但在方框內只是個普通可比對的字元。所以[akm$]可找出 'a','k', 'm',和 '$'。
- (私下覺得方框還原了匹配詞就是比對字的原始定義)
- 在方框內首字元用 '^' 表示,則任何在方框內的字元都不可匹配,也就是 "所有不在方框內的字都符合" !!
- 比如 [^5] ,5 以外的字元都可找出。
- 注意當 '^' 不在方框首位,就當作普通字。比如[5^] 可找出 '5' 和 '^'。
- Pattern內存在的匹配元有功能,無法視為比對內容。比如 [ 或 \ ,不可視為 "找左方框" 和 "找反斜線"。
- 不過,將匹配元前配上反斜線\後,匹配元跳脫功能性回歸成一般字元,比方 \[ 和 \\ ,就視為 "找左方框" 和 "找反斜線"。
- \d:等義 [0-9],所有數字。
- \D:等義 [^0-9],所有非數字。
- \s:等義 [\t\n\r\f\v],所有空白字元。\t是水平跳格,\v是垂直跳格;\r是回車,\n是新行;\f換頁。
- \S:等義 [^\t\n\r\f\v],所有非空白字元。
- \w:等義 [a-zA-Z0-9_],所有字母數字元。
- \W:等義 [^a-zA-Z0-9_],所有非字母數字元。
re.DOTALL
可匹配一切含新行\n的任何字元。重複量詞
- 比如 home-?brew 可找出 'homebrew' 或 'home-brew'。
- 出現 m~n 次:至少 m 次,最多 n 次。
- 省略 m 次表示至少 0 次。
- 省略 n 表示至多任意數量,所以有 {0,}, {1,}, {0,1} 等義 *,+ ,? 的用法
Matched | Explanation | |
---|---|---|
1 |
| 狀態: string 'abcbd'; pattern a[bcd]*b,工作pattern是 a. 工作: RE找到 |
2 |
| 狀態: string剩 'bcbd'; pattern剩 [bcd]*b, 工作patter是[bcd]*. 工作: RE 以 |
3 | Failure | 狀態: string剩 ''; pattern 剩 b , 工作patter是 b. 工作: RE 找尾字 b,但 string 已空無字元可找,比對失敗。 |
4 |
| 工作: 返回,讓工作pattern 回到 |
5 | Failure | 狀態: string剩'd'; pattern剩 b,工作patter是b. 工作: RE再找尾字 |
6 |
| 工作: 再返回,將之前 |
6 |
| 狀態: string剩'bd'; pattern剩b,工作patter是 b. 工作:再試 |
來源與參考: