當使用正則表達式(Regular Expressions, Regex)時,不同的符號和構造具有特定的含義,這些符號和模式可以用來構建靈活且強大的文本匹配規則。
字元類別 (Character Classes)
[abc]: 匹配a、b或c中的任何一個字符。[^abc]: 匹配除了a、b、c之外的任何字符(否定字符集)。[a-z]: 匹配任意小寫字母(a到z)。[A-Z]: 匹配任意大寫字母(A到Z)。[0-9]: 匹配任意數字(0到9)。[a-zA-Z0-9_]: 匹配任意字母、數字或下劃線(單詞字符)。\d: 匹配任意數字,等同於[0-9]。\D: 匹配任意非數字字符,等同於[^0-9]。\w: 匹配任意單詞字符(字母、數字或下劃線),等同於[a-zA-Z0-9_]。\W: 匹配任意非單詞字符,等同於[^a-zA-Z0-9_]。\s: 匹配任意空白字符(空格、Tab、換行等),等同於[ \t\n\r\f\v]。\S: 匹配任意非空白字符,等同於[^ \t\n\r\f\v]。.: 匹配除換行符外的任何單個字符。
量詞 (Quantifiers)
*: 匹配前面的元素0次或多次(零個或多個)。+: 匹配前面的元素1次或多次(至少一個)。?: 匹配前面的元素0次或1次(可選)。{n}: 精確匹配前面的元素n次。{n,}: 匹配前面的元素至少n次。{n,m}: 匹配前面的元素至少n次,最多m次。
位置匹配符號 (Anchors)
^: 匹配字符串的開頭。$: 匹配字符串的結尾。\b: 匹配單詞邊界(單詞的開始或結束)。\B: 匹配非單詞邊界。
分組和引用 (Grouping and References)
(...): 分組,將正則表達式的一部分包起來,並將其視為一個單位。分組的部分可以被捕獲和引用。(?:...): 非捕獲組,分組但不存儲匹配結果。\1,\2, ...: 捕獲組的反向引用,匹配先前分組中捕獲的內容。
特殊字符 (Special Characters) 的轉義
\: 用來轉義正則表達式中的特殊字符(如.、*、+、?、^、$等),使它們作為普通字符處理。
選擇符 (Alternation)
|: 表示邏輯 "或",例如a|b匹配a或b。
特殊語法 (Special Constructs)
(?i): 使匹配忽略大小寫。(?m): 多行模式,使^和$匹配每一行的開頭和結尾。(?s): 使.匹配所有字符,包括換行符。(?=...): 正向先行斷言,要求在此位置後面的字符串與括號內的模式匹配,但不消耗字符。(?!...): 負向先行斷言,要求在此位置後面的字符串不匹配括號內的模式。(?<=...): 正向後行斷言,要求在此位置前面的字符串與括號內的模式匹配,但不消耗字符。(?<!...): 負向後行斷言,要求在此位置前面的字符串不匹配括號內的模式。
貪婪與非貪婪匹配 (Greedy vs Non-Greedy Matching)
.*: 貪婪匹配,匹配儘可能多的字符。.*?: 非貪婪匹配,匹配儘可能少的字符。
範例
數字匹配(包括小數)
number_pattern = r'[-+]?\d*\.?\d+'
[-+]?: 匹配可選的正號 (+) 或負號 (-)。\d*: 匹配零個或多個數字,代表小數點前的整數部分。\.?: 匹配可選的小數點 (.)。\d+: 匹配一個或多個數字,代表小數部分或整數部分。
number_pattern = r'[-+]?\d*\.?\d+'
number = "-123.45"
number_match = re.match(number_pattern, number)
if number_match:
print("數字匹配結果:", number_match.group()) #輸出 數字匹配結果: -123.45
除了正則表達式(regex),還有一些其他方法可以用來處理字符串匹配、查找和替換的任務。
String Methods
Pandas
List Comprehensions
String Templates
但在處理複雜模式匹配時,re正則表達式還是很好用的工具可以客製












