老師說喉嚨不舒服,下午1500都自習= =
實用的筆記 Python[基礎][應用][相關]
基本模式比對 (Pattern Matching):
字面值 (Literals): 直接比對字串中的字符。例如,/abc/ 會比對字串中出現的 "abc"。
特殊字符 (Special Characters): 具有特殊意義的字符,需要使用反斜線 \ 進行轉義才能比對其字面值。常用的有:
. : 比對除了換行符號以外的任何單個字符。
* : 比對前一個字符出現零次或多次。
+ : 比對前一個字符出現一次或多次。
? : 比對前一個字符出現零次或一次(可選)。
^ : 比對字串的開頭 (在字符集中使用時有不同意義,見下方)。
$ : 比對字串的結尾。
[] : 字符集 (Character Sets),比對方括號內的任何一個字符。
例如 [abc] 比對 'a'、'b' 或 'c'。
可以使用連字符 - 表示範圍,例如 [a-z] 比對所有小寫字母。
在 [] 內使用 ^ 表示否定,例如 [^abc] 比對任何不是 'a'、'b' 或 'c' 的字符。
() : 分組 (Grouping),將模式的一部分組合在一起。
可以對分組的內容使用量詞 (如 (ab)+)。
可以捕獲分組匹配到的內容,方便後續引用。
| : 或 (OR),比對 | 符號左右兩邊的任一模式。例如,/a|b/ 比對 'a' 或 'b'。
\d : 比對任何數字字符 (等同於 [0-9])。
\D : 比對任何非數字字符 (等同於 [^0-9])。
\w : 比對任何單詞字符 (字母、數字、底線,等同於 [a-zA-Z0-9_])。
\W : 比對任何非單詞字符 (等同於 [^a-zA-Z0-9_])。
\s : 比對任何空白字符 (空格、tab、換行符號等)。
\S : 比對任何非空白字符。
2. 量詞 (Quantifiers):
* : 零次或多次。
+ : 一次或多次。
? : 零次或一次。
{n} : 恰好 n 次。
{n,} : 至少 n 次。
{n,m} : 至少 n 次,至多 m 次。
3. 定位符 (Anchors):
^ : 比對輸入的開頭。
$ : 比對輸入的結尾。
\b : 比對單詞邊界 (例如,一個單詞的開始或結束)。
\B : 比對非單詞邊界。
4. 分組與捕獲 (Groups and Capturing):
() : 創建一個捕獲分組。匹配到的內容可以在後續通過 $1, $2 等引用 (在 replace() 方法中) 或在正則表達式物件的結果中獲取。
(?:...) : 非捕獲分組 (Non-capturing group)。將模式組合在一起,但不捕獲匹配到的內容,可以提高效能。
5. 正則表達式的方法 (與字串和 RegExp 物件相關):
String.prototype.match(regexp): 檢索字串中與正則表達式匹配的部分。
String.prototype.matchAll(regexp): 返回一個包含所有匹配項的迭代器 (ES2020 新增)。
String.prototype.replace(regexp|substr, newSubstr|function): 將字串中匹配正則表達式 (或子字串) 的部分替換為新的子字串或通過函數返回的值。
String.prototype.search(regexp): 測試字串中是否與正則表達式匹配,返回第一個匹配項的索引,如果沒有匹配則返回 -1。
String.prototype.split(separator|regexp, limit): 使用正則表達式或子字串作為分隔符將字串分割成子字串數組。
RegExp.prototype.test(str): 測試字串中是否存在與正則表達式匹配的部分,返回 true 或 false。
RegExp.prototype.exec(str): 在字串中執行匹配搜索。返回一個結果數組 (包含匹配到的內容和捕獲分組),如果沒有匹配則返回 null。
6. 正則表達式標誌 (Flags):
標誌可以影響正則表達式的比對行為,通常在正則表達式的第二個斜線後指定:
i (ignore case): 忽略大小寫。例如,/abc/i 可以匹配 "abc"、"ABC"、"aBc" 等。
g (global): 全局匹配,尋找所有匹配項,而不是在找到第一個匹配項後停止。
m (multiline): 多行匹配。^ 和 $ 除了匹配整個字串的開頭和結尾外,還會匹配每一行的開頭和結尾 (以換行符號 \n 分隔)。
總結:
