Python正則表達式大全
前言
正則表達式是對字符串(包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱為「元字符」))操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個「規則字符串」,這個「規則字符串」用來表達對字符串的一種過濾邏輯。正則表達式是一種文本模式,該模式描述在搜索文本時要匹配的一個或多個字符串。
上面都是官方的說明,博主自己的理解是(僅供參考):通過事先規定好一些特殊字符的匹配規則,然後利用這些字符進行組合來匹配各種複雜的字符串場景。比如現在的爬蟲和數據分析,字符串校驗等等都需要用到正則表達式來處理數據。
python的正則表達式則是re模塊了。
re 模塊使 Python 語言擁有全部的正則表達式功能。
re 模塊也提供了與這些方法功能完全一致的函數,這些函數使用一個模式字符串做為它們的第一個參數。
基本語法
| 編號 | 表達式 | 描述 |
|---|---|---|
| 1 | a, X, 9, < | 普通字符完全匹配。 |
| 2 | . | 匹配任何單個字符,除了換行符』\n『 |
| 3 | \w | 匹配「單詞」字符:字母或數字或下劃線[a-zA-Z0-9_]。 |
| 4 | \W | 匹配任何非字詞。 |
| 5 | \b | 字詞與非字詞之間的界限 |
| 6 | \s | 匹配單個空格字符 – 空格,換行符,返回,製表符 |
| 7 | \S | 匹配任何非空格字符。 |
| 8 | \t, \n, \r | 製表符,換行符,退格符 |
| 9 | \d | 十進制數[0-9] |
| 10 | ^ | 匹配字符串的開頭 |
| 11 | $ | 匹配字符串的末尾 |
| 12 | \ | 抑制字符的「特殊性」,也叫轉義字符。 |
1.match函數
只從字符串的最開始與pattern進行匹配
下面是函數的語法 –
re.match(pattern, string, flags = 0)
這裡是參數的描述 –
pattern – 這是要匹配的正則表達式。
string – 這是字符串,它將被搜索用於匹配字符串開頭的模式。
flags – 可以使用按位OR(|)指定不同的標誌。 這些是修飾符,如下表所列。
re.match 函數在成功時返回匹配對象,失敗時返回None。使用match(num)或groups()函數匹配對象來獲取匹配的表達式。
| 編號 | 匹配對象 | 描述 |
|---|---|---|
| 1 | group(num = 0) | 此方法返回整個匹配(或特定子組num) |
| 2 | groups() | 此方法返回一個元組中的所有匹配子組(如果沒有,則返回為None) |
示例
import re
line = 'i can speak good english'
matchObj = re.match(r'\s(\w*)\s(\w*).*',line)
if matchObj:
print('matchObj.group() :',matchObj.group())
print('matchObj.group() :',matchObj.group(1))
print('matchObj.group() :',matchObj.group(2))
print('matchObj.group() :',matchObj.group(3))
else:
print('no match!')

import re
line = 'i can speak good english'
matchObj = re.match(r'(i)\s(\w*)\s(\w*).*',line)
if matchObj:
print('matchObj.group() :',matchObj.group())
print('matchObj.group() :',matchObj.group(1))
print('matchObj.group() :',matchObj.group(2))
print('matchObj.group() :',matchObj.group(3))
else:
print('no match!')

2.search函數
與match()工作的方式一樣,但是search()不是從最開始匹配的,而是從任意位置查找第一次匹配的內容。
下面是這個函數的語法 –
re.match(pattern, string, flags = 0)
這裡是參數的描述 –
pattern – 這是要匹配的正則表達式。
string – 這是字符串,它將被搜索用於匹配字符串開頭的模式。
flags – 可以使用按位OR(|)指定不同的標誌。 這些是修飾符,如下表所列。
re.search函數在成功時返回匹配對象,否則返回None。使用match對象的group(num)或groups()函數來獲取匹配的表達式。
| 編號 | 匹配對象 | 描述 |
|---|---|---|
| 1 | group(num = 0) | 此方法返回整個匹配(或特定子組num) |
| 2 | groups() | 此方法返回一個元組中的所有匹配子組(如果沒有,則返回為None) |
示例
import re
line = 'i can speak good english'
matchObj = re.search('(.*) (.*?) (.*)',line)
if matchObj:
print('matchObj.group() :',matchObj.group())
print('matchObj.group() :',matchObj.group(1))
print('matchObj.group() :',matchObj.group(2))
print('matchObj.group() :',matchObj.group(3))
else:
print('no match!')
3.sub()函數
使用正則表達式re模塊中的最重要的之一是sub。
模塊
re.sub(pattern, repl, string, max=0)
此方法使用repl替換所有出現在RE模式的字符串,替換所有出現,除非提供max。此方法返回修改的字符串。
示例
import re
line = 'i can speak good english'
speak = re.sub(r'can','not',line)
print(speak)
speak1 = re.sub(r'\s','',line) #替換所有空格
print(speak1)
特殊語法示例
字符類
| 編號 | 示例 | 說明 |
|---|---|---|
| 1 | [Pp]ython | 匹配「Python」或「python」 |
| 2 | rub[ye] | 匹配「ruby」或「rube」 |
| 3 | [aeiou] | 匹配任何一個小寫元音 |
| 4 | [0-9] | 匹配任何數字; 如[0123456789] |
| 5 | [a-z] | 匹配任何小寫ASCII字母 |
| 6 | [A-Z] | 匹配任何大寫的ASCII字母 |
| 7 | [a-zA-Z0-9] | 匹配上述任何一個 |
| 8 | [^aeiou] | 匹配除小寫元音之外的任何東西 |
| 9 | [^0-9] | 匹配數字以外的任何東西 |
特殊字符類
| 編號 | 示例 | 說明 |
|---|---|---|
| 1 | . | 匹配除換行符以外的任何字符 |
| 2 | \d | 匹配數字:[0-9] |
| 3 | \D | 匹配非數字:[^0-9] |
| 4 | \s | 匹配空格字符:[\t\r\n\f] |
| 5 | \S | 匹配非空格:[^\t\r\n\f] |
| 6 | \w | 匹配單字字符: [A-Za-z0-9_] |
| 7 | \W | 匹配非單字字符: [A-Za-z0-9_] |
重複匹配
| 編號 | 示例 | 說明 |
|---|---|---|
| 1 | ruby? | 匹配「rub」或「ruby」:y是可選的 |
| 2 | ruby* | 匹配「rub」加上0個以上的y |
| 3 | ruby+ | 匹配「rub」加上1個或更多的y |
| 4 | \d{3} | 完全匹配3位數 |
| 5 | \d{3,} | 匹配3位或更多位數字 |
| 6 | \d{3,5} | 匹配3,4或5位數 |
非貪婪重複
這匹配最小的重複次數 –
| 編號 | 示例 | 說明 |
|---|---|---|
| 1 | <.*> | 貪婪重複:匹配「 |
| 2 | <.*?> | 非貪婪重複:在「 |
用圓括號分組
| 編號 | 示例 | 說明 |
|---|---|---|
| 1 | \D\d+ | 沒有分組:+重複\d |
| 2 | (\D\d)+ | 分組:+重複\D\d對 |
| 3 | ([Pp]ython(,)?)+ | 匹配「Python」,「Python,python,python」等 |
反向引用
這與以前匹配的組再次匹配 –
| 編號 | 示例 | 說明 |
|---|---|---|
| 1 | ([Pp])ython&\1ails | 匹配python和pails或Python和Pails |
| 2 | ([‘”])[^\1]*\1 | 單引號或雙引號字符串。\1匹配第一個分組匹配。 \2匹配任何第二個分組匹配等 |
| 3 | python | perl |
| 4 | rub(y | le) |
| 5 | Python(!+ | ?) |
錨點
這需要指定匹配位置。
| 編號 | 示例 | 說明 |
|---|---|---|
| 1 | ^Python | 在字符串或內部行的開頭匹配「Python」 |
| 2 | Python$ | 在字符串或內部行的結尾匹配「Python」 |
| 3 | \APython | 在字符串的開頭匹配「Python」 |
| 4 | Python\Z | 在字符串的末尾匹配「Python」 |
| 5 | \bPython\b | 在字詞的邊界匹配「Python」 |
| 6 | \brub\B | \B是非字詞邊界:在「rube」和「ruby」中匹配「rub」,而不是單獨匹配 |
| 7 | Python(?=!) | 匹配「Python」,如果跟着感嘆號。 |
| 8 | Python(?!!) | 匹配「Python」,如果沒有感嘆號後面。 |
帶括號的特殊語法
| 編號 | 示例 | 說明 |
|---|---|---|
| 1 | R(?#comment) | 匹配「R」。其餘的都是注釋 |
| 2 | R(?i)uby | 匹配「uby」時不區分大小寫 |
| 3 | R(?i:uby) | 同上 |
| 4 | rub(?:yle)) | 僅組合而不創建\1反向引用 |


