【學習筆記】最簡單通俗易懂的正則表示式教程
線上驗證網站:https://regex101.com/
學習參考:白月黑羽/《實戰Python網路爬蟲》
一.限定符
1. .
匹配除了換行符之外的任何單個字元,任何一個字開頭,緊跟一個色字
程式碼:
r的含義:raw string原始字串
compile產生一個Pattern物件,可以呼叫各種方法,對正則表示式的匹配方式
findall返回一個列表
2. ?
表示前面的子表示式0次或1次
最後一行,猴子逗號後面沒有其它字元了,但是?表示匹配1次或0次, 所以最後一行也選中了一個逗號字元。
3. *
匹配前面的子表示式任意次,包括0次
*代表代表前面這個任意字元出現任意次,0也算任意次
對比:逗號本身代表一個字元,逗號後面沒有字元,點‘.’一定要匹配上一個字元
注:中文逗號“,”
以綠開頭,色出現任意次數的
4. +
匹配前面的子表示式一次或多次,不包括0次
*與+對比:+至少匹配一次
5. {}
表示前面的字元匹配指定的次數
注意:英文花括號,否則不生效
6. []
方括號表示括號內可選
[abc]
可以匹配 a, b, 或者 c 裡面的任意一個字元。等價於 [a-c]
。
[a-c]
中間的 - 表示一個範圍從a 到 c。
.在方括號內僅表示.失去特殊含義
^在方括號內依舊錶示非
7. ()
括號稱為正則表示式的組選擇
8. |
表示匹配其中之一
二.對元字元的轉義
反斜槓\為轉義字元
注:此處*和+皆可
反斜槓後面接一些字元,表示匹配 某種型別
的一個字元。
\d 匹配0-9之間任意一個數字字元,等價於表示式 [0-9]
\D 匹配任意一個不是0-9之間的數字字元,等價於表示式 [^0-9]
\s 匹配任意一個空白字元,包括 空格、tab、換行符等,等價於表示式 [\t\n\r\f\v]
\S 匹配任意一個非空白字元,等價於表示式 [^ \t\n\r\f\v]
\w 匹配任意一個文字字元,包括大小寫字母、數字、下劃線,等價於表示式 [a-zA-Z0-9_]
預設情況也包括 Unicode文字字元,如果指定 ASCII 碼標記,則只包括ASCII字母
\W 匹配任意一個非文字字元,等價於表示式 [^a-zA-Z0-9_]
反斜槓也可以用在方括號裡面,比如 [\s,.] 表示匹配 : 任何空白字元, 或者逗號,或者點
三.起始結尾位置和單行多行模式
^表示匹配文字的起始位置
正則表示式可以設定 單行模式
和 多行模式
如果是 單行模式
,表示匹配 整個文字
的開頭位置。(預設)
如果是 多行模式
,表示匹配 文字每行
的開頭位置。(re.M或者re.MULTILINE)
$
表示匹配文字的 結尾
位置。
如果是 單行模式
,表示匹配 整個文字
的結尾位置。
如果是 多行模式
,表示匹配 文字每行
的結尾位置。
四.切割字串
正則表示式 [;,\s]\s*
指定了,分割符為 分號、逗號、空格 裡面的任意一種均可,並且 該符號周圍可以有不定數量的空格。
注:\s為空白字元
五.正則處理函式
1.re.match函式
從字串的開頭開始匹配一個模式,如果成功匹配,就返回一個匹配成功的物件,否則返回None。
使用方式:re.match(pattern,string,flags=0)
2.re.search函式
掃描整個字串並返回第一次成功匹配的物件,如果匹配失敗,就返回None。
使用方式:re.search(pattern,string,flags=0)
3.re.findall函式
用於獲取字串中所有匹配的字串,並以列表的形式返回。
使用方式:re.findall(pattern,string,flags=0)
4.re.sub函式
用於替換字串中的匹配項,如果沒有匹配的項,則返回沒有匹配的字串。
使用方式:re.sub(pattern,string,flags=0)