下面的這個結構圖基本覆蓋了正則表達式上手基礎的所有內容,總結自書《精通Python網絡爬蟲》,包括原子、元字符、模式修正、貪婪模式和懶惰模式以及常用函數等。
更加詳細的見W3C的教程:https://www.w3cschool.cn/python/python-reg-expressions.html
普通字符作爲原子是指一些字母,數字,下劃線等你需要完全匹配的字符,如想匹配字符串"adfadgadgpythonadfadf"
中的"python"
,
此時的"python"
就是普通字符。
常用非打印字符:
符號 | 含義 |
---|---|
\n | 用於匹配一個換行符 |
\t | 用於匹配一個製表符 |
即一個原子可以匹配一類字符:
符號 | 含義 |
---|---|
\w | 匹配任意一個字母、數字或下劃線 |
\W | 匹配除字母、數字和下劃線以外的任意一個字符 |
\d | 匹配任意一個十進制數 |
\D | 匹配除十進制以外的任意一個其他字符 |
\s | 匹配任意一個空白字符 |
\S | 匹配除空白字符以外的任意一個其他字符 |
原子表定義一組地位平等的原子,匹配時會選取該表中任意一個原子進行匹配,例如[xyz]py
可以匹配到ypy
元字符即指正則表達式中的一些特殊含義的字符,如重複N次前面的字符等
符號 | 含義 |
---|---|
. | 匹配除換行符以外的任意字符 |
^ | 匹配字符串的開始位置 |
$ | 匹配字符串的結束位置 |
* | 匹配0次、1次或多次前面的原子 |
? | 匹配0次或一次前面的原子 |
+ | 匹配一次或多次前面的原子 |
{n} | 前面的原子恰好出現n次 |
{n,} | 前面的原子至少出現n次 |
{n,m} | 前面的原子至少出現n次,至多出現m次 |
| | 模式選字符 |
( ) | 模式單元符 |
模式修正符即在不改變正則表達式的前提下改變正則表達式表達的含義,從而實現匹配結果的調整!
符號 | 含義 |
---|---|
I | 匹配時忽略大小寫 |
M | 多行匹配 |
L | 做本地化識別匹配 |
U | 根據Unicode字符及解析字符 |
S | 讓.匹配包括換行符,即用了該模式修正後,’.’就可以匹配任意字符 |
貪婪模式如p.*y
就是儘可能多的匹配,懶惰模式如p.*?
就是儘可能少的匹配,懶惰模式是就近匹配原則。更精準。而貪婪模式會一直匹配直到找到隨後一個相應的字符才停止搜索
函數 | 含義 |
---|---|
re.match() | 從源字符串的起始位置開始匹配 |
re.search() | 掃描整個字符串進行匹配 |
findall() | 根據正則表達式從源字符串中將匹配的結果全部找出,返回一個數組 |
re.sub() | 根據正則表達式實現替換某些字符串的功能 |