### 字符匹配
大多數字母和字符一般都會和自身匹配。例如,正則表達式 test 會和字符串“test”完全匹配。(你也可以使用大小寫不敏感模式,它還能讓這個 RE 匹配“Test”或“TEST”;稍后會有更多解釋。)
這個規則當然會有例外;有些字符比較特殊,它們和自身并不匹配,而是會表明應和一些特殊的東西匹配,或者它們會影響到 RE 其它部分的重復次數。本文很大篇幅專門討論了各種元字符及其作用。
這里有一個元字符的完整列表;其含義會在本指南余下部分進行討論。
```
. ^ $ * +?? { [ ] \ | ( )
```
我們首先考察的元字符是"[" 和 "]"。它們常用來指定一個字符類別,所謂字符類別就是你想匹配的一個字符集。字符可以單個列出,也可以用“-”號分隔的兩個給定字符來表示一個字符區間。例如,[abc] 將匹配"a", "b", 或 "c"中的任意一個字符;也可以用區間[a-c]來表示同一字符集,和前者效果一致。如果你只想匹配小寫字母,那么 RE 應寫成 [a-z].
元字符在類別里并不起作用。例如,[akm$]將匹配字符"a", "k", "m", 或 "$" 中的任意一個;"$"通常用作元字符,但在字符類別里,其特性被除去,恢復成普通字符。
你可以用補集來匹配不在區間范圍內的字符。其做法是把"^"作為類別的首個字符;其它地方的"^"只會簡單匹配 "^"字符本身。例如,[^5] 將匹配除 "5" 之外的任意字符。
也許最重要的元字符是反斜杠"\"。 做為 Python 中的字符串字母,反斜杠后面可以加不同的字符以表示不同特殊意義。它也可以用于取消所有的元字符,這樣你就可以在模式中匹配它們了。舉個例子,如果你需要匹配字符 "[" 或 "\",你可以在它們之前用反斜杠來取消它們的特殊意義: \[ 或 \\。
一些用 "\" 開始的特殊字符所表示的預定義字符集通常是很有用的,象數字集,字母集,或其它非空字符集。下列是可用的預設特殊字符:
```
\d 匹配任何十進制數;它相當于類 [0-9]。
\D 匹配任何非數字字符;它相當于類 [^0-9]。
\s 匹配任何空白字符;它相當于類 [ \t\n\r\f\v]。
\S 匹配任何非空白字符;它相當于類 [^ \t\n\r\f\v]。
\w 匹配任何字母數字字符;它相當于類 [a-zA-Z0-9_]。
\W 匹配任何非字母數字字符;它相當于類 [^a-zA-Z0-9_]。
```
這樣特殊字符都可以包含在一個字符類中。如,[\s,.]字符類將匹配任何空白字符或","或"."。
本節最后一個元字符是 . 。它匹配除了換行字符外的任何字符,在 alternate 模式(re.DOTALL)下它甚至可以匹配換行。"." 通常被用于你想匹配“任何字符”的地方。