Python正則表達式大全

前言

正則表達式是對字符串(包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱爲「元字符」))操做的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個「規則字符串」,這個「規則字符串」用來表達對字符串的一種過濾邏輯。正則表達式是一種文本模式,該模式描述在搜索文本時要匹配的一個或多個字符串。
上面都是官方的說明,博主本身的理解是(僅供參考):經過事先規定好一些特殊字符的匹配規則,而後利用這些字符進行組合來匹配各類複雜的字符串場景。好比如今的爬蟲和數據分析,字符串校驗等等都須要用到正則表達式來處理數據。
python的正則表達式則是re模塊了。
re 模塊使 Python 語言擁有所有的正則表達式功能。
re 模塊也提供了與這些方法功能徹底一致的函數,這些函數使用一個模式字符串作爲它們的第一個參數。python

基本語法

編號 表達式 描述
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 \ 抑制字符的「特殊性」,也叫轉義字符。

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)

示例

#未從初始位置匹配,會返回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!')

search函數

與match()工做的方式同樣,可是search()不是從最開始匹配的,而是從任意位置查找第一次匹配的內容。
下面是這個函數的語法 -
re.match(pattern, string, flags = 0)ruby

這裏是參數的描述 -
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!')

sub()函數

使用正則表達式re模塊中的最重要的之一是sub。
模塊
re.sub(pattern, repl, string, max=0)code

此方法使用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位數

非貪婪重複

這匹配最小的重複次數 -blog

編號 示例 說明
1 <.*> 貪婪重複:匹配「 perl>」
2 <.*?> 非貪婪重複:在「 perl」中匹配「

用圓括號分組

編號 示例 說明
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反向引用
相關文章
相關標籤/搜索