正則表達式是用于處理字符串的強大工具,擁有自己獨特的語法以及一個獨立的處理引擎,效率上可能不如 str 自帶的方法,但功能十分強大。本文介紹了 Python 對于正則表達式的支持,包括正則表達式基礎以及 Python 正則表達式標準庫的完整介紹及使用示例。
1. 正則表達式基礎
1.1 介紹
正則表達式并不是 Python 的一部分。正則表達式是用于處理字符串的強大工具,擁有自己獨特的語法以及一個獨立的處理引擎,效率上可能不如 str 自帶的方法,但功能十分強大。得益于這一點,在提供了正則表達式的語言里,正則表達式的語法都是一樣的,區(qū)別只在于不同的編程語言實現支持的語法數量不同;但不用擔心,不被支持的語法通常是不常用的部分。
下圖展示了使用正則表達式進行匹配的流程:
正則表達式的大致匹配過程是:依次拿出表達式和文本中的字符比較,如果每一個字符都能匹配,則匹配成功;一旦有匹配不成功的字符則匹配失敗。
1.2 正則表達式模式
下表列出了 python 正則表達式模式語法中的特殊元素。如果你使用模式的同時提供了可選的標志參數,某些模式元素的含義會改變。
模式 | 描述 | 示例 |
字符 | ||
. | 匹配任意字符,除了換行符,當 re.DOTALL 標記被指定時,則可以匹配包括換行符的任意字符。 | a.c |
\ | 轉義字符,使后一個字符改變原來的意思。如果字符串中有字符 * 需要匹配,可以使用 \* 或者字符集 [*]。 | a\.c 或者 a\\c |
[...] | 字符集(字符類),用來表示一組字符。字符集中的字符可單獨列出:[amk] 匹配 'a','m' 或 'k';也可以給出范圍:[a-c] 匹配 'a','b' 或 'c'。 | a[bcd]e |
[^...] | 不在 [] 中的字符:[^abc] 匹配除了 a,b,c 之外的字符。 | [^abc] |
預定義字符集(可以寫在字符集 [...] 中) | ||
\d | 匹配任意數字,等價于 [0-9]。 | a\dc |
\D | 匹配任意非數字,等價于 [^\d]。 | a\Dc |
\s | 匹配任意空白字符,等價于 [<空格>\t\n\r\f\v]。 | a\sc |
\S | 匹配任意非空字符,等價于 [^\s]。 | a\Sc |
\w | 匹配字母數字及下劃線:[a-zA-Z0-9_]。 | a\wc |
\W | 匹配非字母數字及下劃線:[^\w]。 | a\Wc |
數量詞(可用在字符或 [...] 后) | ||
* | 匹配前一個字符 0 或無限次。 | abc* |
+ | 匹配前一個字符 1 次或無限次。 | abc+ |
? | 匹配前一個字符 0 次或 1 次。 | abc? |
{m} | 匹配前一個字符 m 次。 | ab{2}c |
{m,n} | 匹配前一個字符 m 至 n 次。m 和 n 可以省略:如省略 m,則匹配 0 至 n 次;如省略 n,則匹配 m 至無限次。 | ab{1,2}cd |