標籤:pytho 等價 精確 標準庫 mat art 預設 表示 blog
1.Regex常用操作符
. 表示任何單個字元
[ ] 字元集,對單個字元給出取值範圍 [abc]表示a、b、c,[a‐z]表示a到z單個字元
[^ ] 非字元集,對單個字元給出排除範圍 [^abc]表示非a或b或c的單個字元
* 前一個字元0次或無限次擴充 abc* 表示 ab、abc、abcc、abccc等
+ 前一個字元1次或無限次擴充 abc+ 表示 abc、abcc、abccc等
? 前一個字元0次或1次擴充 abc? 表示 ab、abc
| 左右運算式任意一個 abc|def 表示 abc、def
{m} 擴充前一個字元m次 ab{2}c表示abbc
{m,n} 擴充前一個字元m至n次(含n) ab{1,2}c表示abc、abbc
^ 匹配字串開頭 ^abc表示abc且在一個字串的開頭
$ 匹配字串結尾 abc$表示abc且在一個字串的結尾
( ) 分組標記,內部只能使用 | 操作符 (abc)表示abc,(abc|def)表示abc、def
\d 數字,等價於[0‐9]
\w 單詞字元,等價於[A‐Za‐z0‐9_]
2.經典Regex執行個體
^[A‐Za‐z]+$ 由26個字母組成的字串
^[A‐Za‐z0‐9]+$ 由26個字母和數字組成的字串
^‐?\d+$ 整數形式的字串
^[0‐9]*[1‐9][0‐9]*$ 正整數形式的字串
[1‐9]\d{5} 中國境內郵遞區號,6位
[\u4e00‐\u9fa5] 匹配中文字元
\d{3}‐\d{8}|\d{4}‐\d{7} 國內電話號碼,010‐68913536
IP地址字串形式的Regex(IP地址分4段,每段0‐255)
\d+.\d+.\d+.\d+ 或 \d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}
精確寫法 0‐99: [1‐9]?\d
100‐199: 1\d{2}
200‐249: 2[0‐4]\d
250‐255: 25[0‐5]
(([1‐9]?\d|1\d{2}|2[0‐4]\d|25[0‐5]).){3}([1‐9]?\d|1\d{2}|2[0‐4]\d|25[0‐5])
3.Re庫是Python的標準庫,主要用於字串匹配
調用方式:import re
類型:
raw string類型(原生字串類型)表示Regex,raw string是不包含對轉義符再次轉義的字串,表示為:r‘text‘
string類型表示Regex,支援轉義符
主要功能函數:
(1)re.search(pattern, string, flags=0)在一個字串中搜尋匹配Regex的第一個位置,返回match對象
? pattern : Regex的字串或原生字串表示
? string : 待匹配字串
? flags : Regex使用時的控制標記
re.I re.IGNORECASE 忽略Regex的大小寫,[A‐Z]能夠匹配小寫字元
re.M re.MULTILINE Regex中的^操作符能夠將給定字串的每行當作匹配開始
re.S re.DOTALL Regex中的.操作符能夠匹配所有字元,預設匹配除換行外的所有字元
(2)re.match(pattern, string, flags=0)從一個字串的開始位置起匹配Regex,返回match對象
(3)re.findall(pattern, string, flags=0) 搜尋字串,以清單類型返回全部能匹配的子串
(5)re.split(pattern, string, maxsplit=0, flags=0) 將一個字串按照Regex匹配結果進行分割,返回清單類型
maxsplit: 最大分割數,剩餘部分作為最後一個元素輸出
(6)re.finditer(pattern, string, flags=0) 搜尋字串,返回一個匹配結果的迭代類型,每個迭代元素是match對象
(7)re.sub(pattern, repl, string, count=0, flags=0) 在一個字串中替換所有匹配Regex的子串,返回替換後的字串
repl : 替換匹配字串的字串
count : 匹配的最大替換次數
4.物件導向用法:編譯後的多次操作
regex = re.compile(pattern, flags=0)將Regex的字串形式編譯成Regex對象
? pattern : Regex的字串或原生字串表示
? flags : Regex使用時的控制標記
regex.search() 在一個字串中搜尋匹配Regex的第一個位置,返回match對象
regex.match() 從一個字串的開始位置起匹配Regex,返回match對象
regex.findall() 搜尋字串,以清單類型返回全部能匹配的子串
regex.split() 將一個字串按照Regex匹配結果進行分割,返回清單類型
regex.finditer() 搜尋字串,返回一個匹配結果的迭代類型,每個迭代元素是match對象
regex.sub() 在一個字串中替換所有匹配Regex的子串,返回替換後的字串
5.Match對象是一次匹配的結果,包含匹配的很多資訊
屬性:.string 待匹配的文本
.re 匹配時使用的patter對象(Regex)
.pos Regex搜尋文本的開始位置
.endpos Regex搜尋文本的結束位置
方法:.group(0) 獲得匹配後的字串
.start() 匹配字串在原始字串的開始位置
.end() 匹配字串在原始字串的結束位置
.span() 返回(.start(), .end())
6.貪婪匹配和最小匹配
同時匹配長短不同的多項,Re庫預設採用貪婪匹配,即輸出匹配最長的子串
最小匹配:
*? 前一個字元0次或無限次擴充,最小匹配
+? 前一個字元1次或無限次擴充,最小匹配
?? 前一個字元0次或1次擴充,最小匹配
{m,n}? 擴充前一個字元m至n次(含n),最小匹配
python網路爬蟲與資訊提取——6.Re(Regex)庫入門