在做接口的時候,上個接口返回的數據做為下一個接口的參數,這個時候我們可以用到正則表達式進行提取
正則表達式
正則表達式(regular expression)描述了一種字符串匹配的模式,可以用來檢查一個串是否含有某種子串、將匹配的子串替換或者從某個串中取出符合某個條件的子串等。
正則表達式常用字符
re模塊
在python語言中正則表達式是通過re模塊進行實現的
re模塊常用方法
re.match(pattern, string, flags=0)
# match用法 re.match(pattern, string, flags=0) a = 'foo' b= 'foo ' m = re.match(a,b) # 模式匹配字符串,匹配就返回信息,不匹配就返回None,如果從開始匹配,匹配到就返回。 print(m) if m is not None: # 如果匹配,就返回匹配內容 print(m.group()) 執行結果: <re.Match object; span=(0, 3), match='foo'> foo
group()表示返回匹配對象
groups()表示返回包含唯一或者全部的元祖形式
search(pattern, string, flags=0)
# search用法 # search(pattern, string, flags=0) a = 'foo' b= 'seafood ' m = re.search(a,b) # 搜索匹配字符串,匹配就返回信息,不匹配就返回None print(m) if m is not None: # 如果匹配,就返回匹配內容 print(m.group()) 執行結果: <re.Match object; span=(3, 6), match='foo'> foo
match()和search區別
re.match只匹配字符串的開始,如果字符串開始不符合正則表達式,則匹配失敗,函數返回None;而re.search匹配整個字符串,直到找到一個匹配。
findall(pattern, string, flags=0)
# findall用法 # re.findall(pattern, string, flags=0) a = 'sea foo' b= 'sea food ' m = re.findall(a,b) # 進行匹配,發現匹配的返回一個列表,如果沒有找到匹配的,則返回空列表 print(m) 代碼結果: ['sea foo']
finditer(pattern, string, flags=0)
# finditer用法 # finditer(pattern, string, flags=0) b= 's3eaf1oo2d ' m = re.finditer(r'\d',b) # 返回內容存在一個迭代器中 for i in m: print(i.group()) 代碼結果: 3 1 2
sub(pattern, repl, string, count=0, flags=0)
subn(pattern, repl, string, count=0, flags=0)
# sub 和subn的用法 # sub(pattern, repl, string, count=0, flags=0) # subn(pattern, repl, string, count=0, flags=0) a = 'Anjing is a test' b = 'exploit' m = re.sub('test',b,a) # 搜索和替換,返回替換內容 m1 = re.subn('test',b,a) # 搜索和替換,返回替換內容+替換總數字 print(m) print(m1) 代碼結果: Anjing is a exploit ('Anjing is a exploit', 1)
兩者區別,subn返回比sub多一個替換總數字
split(pattern, string, maxsplit=0, flags=0)
# split用法 # split(pattern, string, maxsplit=0, flags=0) a = 'test1:test2:test3' m = re.split(':',a) # 已:進行分割,並返回分割數據已列表展示 print(m) 代碼結果: ['test1', 'test2', 'test3']