一,單一字元匹配:
(1)匹配任意字元: .
import re
res = re.match(r'a..','abcd')
print(res.group())
#列印結果:abc
一點.表示匹配任意的字元。上面的**表示匹配a後面的任意兩個字元。必須從a開始。若寫成 b.. 則會發生錯誤。
(2)匹配指定字元:[ ]
如 [ 0-9a-za-z ] 表示 匹配乙個 0~9或所有英文本母
import re
res = re.match(r'[0-9a-za-z]',r'abc')
print(res.group())
#列印結果:a
(3)\d 和 \d:匹配數字和匹配非數字
import re
res = re.match(r'\d',r'123abc')
print(res.group())
#列印結果:1
(4)\s 和 \s :匹配空白字元和非空白字元(就是空格)
(5)\w 和 \w:匹配 0~9,a~z,a~z的字元 和 非 0~9,a~z,a~z的字元
跟[ 0-9a-za-z ]作用相同
(6)\b 和 \b
\b的作用是匹配乙個單詞邊界,即是單詞和空間之間的位置
例如: er\b 可以匹配 never 中的 er ,但不能匹配 verb 中的 er
二,一次匹配多個字元
(1) * 匹配前乙個字元0~無限次
import re
res = re.match('1*', r'112233abcd')
print(res.group())
#列印結果:11
上面的**由於 *的前面是1,所以可以匹配無限個1(其實只有2兆多個)
import re
res = re.match(r'\w*', r'112233abcd')
print(res.group())
#列印結果:112233abcd
上面的**則列印全部的字串
(2)+ 匹配前乙個字元 1~無限次
+ 與 * 的區別就是 + 不允許沒有匹配到字元,而 * 可以不匹配到字元
import re
res = re.match(r'1+', r'112233abcd')
print(res.group())
#列印結果:11
若:
import re
res = re.match(r'0+', r'112233abcd')
print(res.group())
#列印結果:程式報錯,因為字串裡沒有0
(3)?匹配前乙個字元 0次或者1次
import re
res = re.match(r'1?', r'1112233abcd')
print(res.group())
#列印結果:1
(4) 和 匹配前乙個字元m次 和 匹配前乙個字元至少n次至多m次
import re
res = re.match(r'1', r'111112233abcd')
print(res.group())
#列印結果:111
三,字串邊界匹配
(1)^ 和 $ 在字串中
^用在字串中表示匹配時,^後的第乙個字元必須在字串的第乙個位置,而$則規定$前面的內容必須在字串的最後才能匹配成功,如:
import re
#匹配電子郵箱
res = re.match(r'\[email protected]$',r'[email protected]')
print(res.group())
#列印結果:程式出現錯誤,因為$表示所在位置必須是字串的結尾
res = re.match(r'\[email protected]$',r'[email protected]')
print(res.group())
#列印結果:[email protected]
(2)\a 和 \z
作用和 ^ 和 $ 一樣。
四,分組匹配
(1) |
a|b 的作用是匹配 a 或 b,如:
import re
#匹配電子郵箱
res = re.match(r'\w+@(163|126|qq)\.com',r'[email protected]')
print(res.group())
#列印結果:[email protected]
#這樣寫不僅可以匹配126的郵箱,還能匹配163和qq郵箱。
(2)分組(ab):作用是()中的ab被視為乙個分組
import re
#匹配電子郵箱
reg = r'<(dir>)\w+test_zje'
res = re.match(reg,str)
print(res.group())
#列印結果:test_zje
#上面的** 括號()括起了 dir> 表示 dir> 為第乙個分組,所以後面的\1 就表示第乙個分組 dir>
當然也可以給分組起乙個名字,用名字來引用分組,如:
import re
#匹配電子郵箱
reg = r'<(?p[\w]+>).+test_zje'
res = re.match(reg,str)
print(res.group())
#列印結果:test_zje
#上面的** 把第乙個分組命名為 mark,然後(?p=mark)表示引用乙個命名為mark的分組
(3)向前向後查詢
只有在組內才能向前向後查詢
如在字串 src="" 中的
正則可以這樣寫: reg = r' ((?<=src=")") ) '
前面的(?<=src=)表示若字串中有 「src=」 這個字串則匹配,但不返回 「src=「 這個字串,用在正規表示式之前
後面的(?=")表示若字串中有 雙引號「 則匹配,但不返回 雙引號」 ,用在正規表示式之後。
python正規表示式(二)
re模組的用法 1 re.s可以匹配轉義符 re.findall k.n darken dark nn 只輸出第乙個darken中的ken re.findall k.n darken dark nn re.s 不僅輸出darken中的ken,還輸出了dak nn中的k nn 2 re.m匹配多行 r...
Python 正規表示式(二)
這次的正規表示式學習談一談選擇符和子模式 可選項和重複子模式 在字串的各個字元都不相同的請胯下,字符集是比較好用的,但是如果只想匹配特定的字串,那麼字符集就不合適了,這裡就可以使用管道符號 比如我們只想匹配字串 python 和 perl 我們可以使用正則 python perl 但是有時候我們不需...
python正規表示式(二)
python的正規表示式支援大量的擴充套件符號 通過使用 ilmsux 系列,使用者可以在正規表示式裡面指定乙個或者多個標記,而不是通過compile 或者其他re模組函式。下面使用re.i ignorecase的示例,最後乙個示例在re.m multiline實現多行混合。import re re...