當我們從HTML text中提取信息時,可以發現很多信息都是有規律的,比如我們要獲得網頁鏈接url、提取網頁中的IP、查詢具有某種規律的字符串。正則表達式就是用於匹配具有某種規律的字符串而產生的,換句話說,正則表達式就是記錄文本規則的代碼。
一、正則表達式介紹
正則表達式:regular expression (RE)
正則表達式是用來簡介表達一組字符串的表達式。
用途:表達文本類型的特徵、同時查找替換一組字符串、匹配字符串的部分或全部
二、正則表達式語法
常用的元字符:匹配數字、英文字母、空格等字符
字符 | 描述 |
---|---|
. | 匹配除換行符外的任意字符 |
\w | 匹配字母、數字、下劃線或漢字,等價於[A-Za-z0-9] |
\s | 匹配任意的空白符(space) |
\d | 匹配數字(digit) |
\b | 匹配字符串的開始或結束 |
^ | 匹配字符串的開始 |
$ | 匹配字符串的結束 |
常用的限定符:指定重複次數
語法 | 描述 |
---|---|
? | 前一字符0次/1次重複 |
+ | 前一字符1次或多次重複 |
* | 前一字符任意次數重複 |
{n} | 擴展前一字符n次 |
{n, } | 擴展前一字符n次或更多次 |
{m, n} | 擴展前一字符m 到 n次 |
常用反義代碼:排除某些字符
語法 | 描述 |
---|---|
\W | 匹配非字母、數字、下劃線或漢字的字符 |
\S | 匹配任意不是空白符的字符 |
\D | 匹配任意非數字的字符 |
\B | 匹配非單詞開否/結尾的位置 |
[^x] | 匹配除了x意外的字符 |
[^abc] | 匹配非a非b非c的單個字符 |
其他常用的操作符
操作符 | 描述 |
---|---|
\ | 轉義字符,如\*匹配* ,\\匹配\ |
[] | 字符集,對某個字符給出取值範圍 |
| | 左右表達式任意一個 abc|cba 表示abc或cba |
() | 分組標記,內部只能有 | |
貪婪匹配 與 最小匹配:
貪婪:正則表達式儘可能匹配更多的字符,如:用a.b匹配aabab將得到aabab
懶惰:需要儘可能少的匹配,可以在它後面加上一個問號?。如:用a.?b取匹配aabab得到aab
語法 | 描述 |
---|---|
*? | 重複若以此,但儘可能少重複 |
+? | 重複1次或更多次,但儘可能少重複 |
?? | 重複0或1次,但儘可能少重複 |
{n, m}? | 重複n到m次,但儘可能少重複 |
{n, }? | 重複n次以上,但儘可能少重複 |
三、正則表達式運算符的優先級
正則表達式從左到右進行運算,並遵循優先級順序。不同優先級運算時先高後低。
運算符優先級表
運算符 | 描述 |
---|---|
\ | 轉義符 |
(), (?: ), (?=), [] | 圓括號與方括號 |
*, +, ?, {n}, {n, m} | 限定符 |
^, $, \如何元字符、如何字符 | 位置和字符匹配 |
| | 或操作 |
四、正則表達式舉例
easy:
RE | strings |
---|---|
python+ | “python”, “pythonn” “pythonnn”… |
py[th]on | “pyton”, “pyhon” |
py[^t]?hon | “pyhon”, “pyahon”, “pybhon”… |
py{:2}thon | “pthon”, “pyhon”, “pyython” |
complex:
RE | strings |
---|---|
2[0-4]\d | 匹配數字字符串200-249 |
^[A-Za-z]+& | 英文字母字符串 |
^-?\d+& | 整數字符串(正負數) |
^[1-9][1-9]*$ | 正整數字符串 |
[\u4e00-\u9fa5] | 匹配中文字符 |
\d{3}-\d{8}|\d{4}-\d{7} | 電話號碼:0731-6666666 |
第七篇python爬蟲學習筆記完結啦 cheers 🍻🍻
ps:正則表達式30分鐘入門
參考內容:https://www.bilibili.com/video/av9784617/?p=39