前言
首先要明白什麼是正則表達式?
正則表達式又稱規則表達式,是對字元串操作的一種邏輯公式,就是用事先定義好的一些特定字元及這些特定字元的組合,組成一個「規則字元串「,這個」規則「用來表達對字元串的一種過濾邏輯。通俗講就是給定一個規則(模式),然後根據這個規則去匹配文本。
常見的匹配模式
ps:上下滑動查看更多,高清原照後臺回復:正則
查看re模塊的功能信息
import re print(re.__doc__)
re的主要功能函數
常用的功能函數包括:
compile、search、match、split、findall(finditer)、sub(subn)、escape等等。
re.match
re.match 嘗試從字元串的起始位置匹配一個模式,如果不是起始位置就匹配成功的話,match()就返回None,即它返回從位置 0 開始有匹配的情況。
語法格式:
re.match(pattern, string[, flags])
flags: 編譯標誌位,用於修改正則表達式的匹配方式,如:是否區分大小寫,多行匹配等。
示例:
import re
string = hello world!! 123 ABC $9.99 +feg result = re.match(world,string) print(result)
None import re
string = hello world!! 123 ABC $9.99 +feg result1 = re.match(he.*!!s(d{2}).*B,string) # 貪婪匹配 print(result1) print(result1.group()) print(result1.group(1))
result2 = re.match(he.*?!!sd{3}swwws$d.dd,string) # 非貪婪匹配: .任意字元 *零到多次 ?非貪婪 print(result2) print(result2.group())
<_sre.SRE_Match object; span=(0, 20), match=hello world!! 123 AB> hello world!! 123 AB12 <_sre.SRE_Match object; span=(0, 27), match=hello world!! 123 ABC $9.99> hello world!! 123 ABC $9.99
re.search
re.search 掃描整個字元串並返回第一個成功的匹配,如果沒有匹配的就返回None。
re.search(pattern, string[, flags])
string = hello world!! 123 ABC $9.99 +feg result = re.search(!!s(d{2}).*?(BC).*?.(d+).*?f(w)+,string) # 貪婪匹配 #註:(w)+只匹配最後一個字母g print(result) print(result.group()) print(result.group(2)) print(result.group(1,2,3)) print(result.groups())
<_sre.SRE_Match object; span=(11, 32), match=!! 123 ABC $9.99 +feg> !! 123 ABC $9.99 +feg BC (12, BC, 99) (12, BC, 99, g)
小結:為匹配方便,盡量用search而不用match
re.findall
搜索字元串,以列表形式返回全部能匹配的子串。
re.findall(pattern, string[, flags])
import re string = <ul id="list" class="list-group"> <li>哈哈哈哈</li> <li data-view="1"> <a href="/1.com" singer="one">123456789</a> </li> <li data-view="2" class="active"> <a href="/2.com" singer="two">abc</a> </li> <li data-view="3"><a href="/4.com" singer="three">ABCDEF</a></li> <li data-view="4"><a href="/5.com" singer="four">000000</a></li> </ul>
results = re.findall(<li.*?href="(.*?)".*?singer="(.*?)">(.*?)</a>, string, re.S) print(results) for result in results: print(result) print(result[0], result[1], result[2]))
略
re.finditer
與 findall 類似,在字元串中找到正則表達式所匹配的所有子串,並組成一個迭代器返回。
re.finditer(pattern, string[, flags])
re.sub
在字元串 string 中找到匹配正則表達式 pattern 的所有子串,用另一個字元串 repl 進行替換。如果沒有找到匹配 pattern 的串,則返回未被修改的 string。Repl 既可以是字元串也可以是一個函數。
re.sub(pattern, repl, string[, count, flags]) re.subn(pattern, repl, string[, count, flags]) 返回內容包括替換次數
string = hello world!! 123 ABC $9.99 +feg result1 = re.sub(d+, 換, string) print(result1) result2 = re.sub(d, 換, string) print(result2) result3 = re.sub((d+), r1換, string) #模式處追加 print(result3)
hello world!! 換 ABC $換.換 +feg hello world!! 換換換 ABC $換.換換 +feg hello world!! 123換 ABC $9換.99換 +feg
註:零長度的匹配也會被替換
re.split
re.split(pattern, string[, maxsplit=0, flags=0])
將字元串匹配正則表達式的部分割開,並返回一個列表。
用匹配pattern的子串來分割string,如果pattern裏使用了圓括弧,那麼被pattern匹配到的串也將作為返回值列表的一部分。如果maxsplit不為0,則最多被分割為maxsplit個子串,剩餘部分將整個地被返回。
註:split不會被零長度的正則所分割。
string = A-B-C-D-F-G print(re.split(r-,string)) print(re.split(r(-),string)) print(re.split(r-,string,1)) print(re.split(r-,string,2)) print(re.split(r(-),string,2))
[A, B, C, D, F, G] [A, -, B, -, C, -, D, -, F, -, G] [A, B-C-D-F-G] [A, B, C-D-F-G] [A, -, B, -, C-D-F-G]
re.escape
把string中,除了字母和數字以外的字元,都加上反斜桿。
string = 123 A - B @ C 456 # D % F (G) 789* print(re.escape(string))
123 A - B @ C 456 # D \% F (G) 789*
把正則表達式語法轉化成正則表達式對象,以便於復用該匹配模式
re.compile(pattern[, flags])
string = haha 123 world is cool pattern = re.compile(ha.*cool) result = re.match(pattern, string) print(result) print(result.group())
<_sre.SRE_Match object; span=(0, 22), match=haha 123 world is cool> haha 123 world is cool content = haha 123 world is cool123456789 I am a haha,what? 666 haha 123 world is cool euiujkldmfhgfg85df5hg5j6fg6h8 tycv haha 123 world is coolsgsreg19---41f351**165sd
r_m = re.match(pattern, content) print(r_m.group())
r_s = re.search(pattern,content) print(r_s.group())
r_f = re.findall(pattern,content) print(r_f)
r_fter = re.finditer(pattern,content) print(r_fter)
haha 123 world is cool haha 123 world is cool [haha 123 world is cool, haha 123 world is cool, haha 123 world is cool] <callable_iterator object at 0x7fb03ceca160>
薦讀:
urllib的基本用法
urllib3的基本用法
requests的基本使用