Python正則表達(dá)式re.search()用法詳解
re.search():匹配整個(gè)字符串,并返回第一個(gè)成功的匹配。如果匹配失敗,則返回None
pattern: 匹配的規(guī)則,
string : 要匹配的內(nèi)容,
flags 標(biāo)志位 這個(gè)是可選的,就是可以不寫,可以寫, 比如要忽略字符的大小寫就可以使用標(biāo)志位
flags : 可選,表示匹配模式,比如忽略大小寫,多行模式等,具體參數(shù)為:
- re.I 忽略大小寫
- re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依賴于當(dāng)前環(huán)境
- re.M 多行模式
- re.S 即為 . 并且包括換行符在內(nèi)的任意字符(. 不包括換行符)
- re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依賴于 Unicode 字符屬性數(shù)據(jù)庫
- re.X 為了增加可讀性,忽略空格和 # 后面的注釋
示例代碼:【檢查字符串是否以 "Long" 開頭并以 "China" 結(jié)尾】
import re s = "Long live the people's Republic of China" ret = re.search("^Long.*China$", s) print(ret) print(ret.group()) print(ret[0])
運(yùn)行結(jié)果:
示例代碼:【在字符串中搜索第一個(gè)空白字符】
import re s = "Long live the people's Republic of China" ret = re.search("\s", s) print(ret) print(ret.start())
運(yùn)行結(jié)果:
示例代碼:【如果search未匹配到,返回None】
import re s = "Long live the people's Republic of China" ret = re.search("USA", s) print(ret)
運(yùn)行結(jié)果:
示例代碼:【忽略大小寫】
import re s = "Long live the people's Republic of China" # ret1 = re.search('long', s) 這行代碼直接報(bào)錯(cuò) ret1 = re.search('l', s) print(ret1) print(ret1.span()) print(ret1.string) print(ret1.group()) print("*" * 50) ret2 = re.search('long', s, re.I) print(ret2) print(ret2.span()) print(ret2.string) print(ret2.group())
運(yùn)行結(jié)果:
示例代碼:【group()的使用】
import re s = 'abc123def456ghi789' ret_compile = re.compile("([a-z]*)([0-9]*)([a-z]*)") print(ret_compile) ret = ret_compile.search(s) print(ret) print(ret.group()) print(ret.group(0)) # group()和group(0) 一樣匹配的是整體 print(ret.group(1)) # 匹配第1個(gè)小括號的內(nèi)容 print(ret.group(2)) # 匹配第2個(gè)小括號的內(nèi)容 print(ret.group(3)) # 匹配第3個(gè)小括號的內(nèi)容
運(yùn)行效果:
示例代碼:【group()分組的使用】
import re s = 'abc123def456ghi789' ret_compile = re.compile("(?P<num1>[a-z]*)(?P<num2>[0-9]*)(?P<num3>[a-z]*)") print(ret_compile) ret = ret_compile.search(s) print(ret) print(ret.group()) print(ret.group(0)) # group()和group(0) 一樣匹配的是整體 print(ret.group(1)) # 匹配第1個(gè)小括號的內(nèi)容 print(ret.group(2)) # 匹配第2個(gè)小括號的內(nèi)容 print(ret.group(3)) # 匹配第3個(gè)小括號的內(nèi)容 print("*" * 100) print(ret.group()) print(ret.group("num1")) # 這里效果等同于group(1) print(ret.group("num2")) # 這里效果等同于group(3) print(ret.group("num3")) # 這里效果等同于group(3)
運(yùn)行效果:
總結(jié):為匹配方便,能用search就不用match,match方法限定匹配時(shí),頭部必須是一致的
匹配演練:最后我們做些匹配演練,實(shí)戰(zhàn)下
import re html='''<div id="songs-list"> <h2 class="title">經(jīng)典老歌</h2> <p class="introduction"> 經(jīng)典老歌列表 </p> <ul id ="list" class="list-group"> <li data-view="2">一路上有你</li> <li data-view="7"> <a href="/2.mp3" singer="任賢齊">滄海一聲笑</a> </li> <li data-view="4" class="active"> <a href="/3.mp3" singer="齊秦">往事隨風(fēng)</a> </li> <li data-view="6"><a href="/4.mp3" singer="beyond">光輝歲月</a></li> <li data-view="5"><a href="/5.mp3" singer="陳惠琳">記事本</a></li> <li data-view="5"> <a href="/6.mp3" singer="鄧麗君"><i class="fa fa-user"></i>但愿人長久</a> </li> </ul> </div> '''
上面是html代碼,要求匹配出 第3個(gè)li標(biāo)簽中的齊秦 往事隨風(fēng) ,代碼如下:
result = re.search('<li.*?active.*?singer="(.*?)">(.*?)</a>',html,re.S)#re.S確保.能匹配到換行符 if result: print(result.group(1),result.group(2))
結(jié)果:
齊秦 往事隨風(fēng)
我們還要求匹配出第二個(gè)li標(biāo)簽中的內(nèi)容 任賢齊 滄海一聲笑
result = re.search('<li.*?singer="(.*?)">(.*?)</a>',html,re.S) if result: print(result.group(1),result.group(2))
結(jié)果:
任賢齊 滄海一聲笑
如果匹配時(shí)候不需要匹配換行符,那么參數(shù)中就沒必要帶re.S,比如匹配第4個(gè)和第5個(gè)li標(biāo)簽中的歌手和歌名。但是re.search也僅僅是返回一個(gè)符合匹配的結(jié)果。如果我們要返回符合匹配的所有結(jié)果,要用到re.findall。這一節(jié)的re.search就說到這里。
總結(jié)
到此這篇關(guān)于Python正則表達(dá)式re.search()用法詳解的文章就介紹到這了,更多相關(guān)Python re.search()用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Django數(shù)據(jù)庫操作的實(shí)例(增刪改查)
下面小編就為大家?guī)硪黄狣jango數(shù)據(jù)庫操作的實(shí)例(增刪改查)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09Python中使用tarfile壓縮、解壓tar歸檔文件示例
這篇文章主要介紹了Python中使用tarfile壓縮、解壓tar歸檔文件示例,本文直接給出解壓和壓縮代碼示例,需要的朋友可以參考下2015-04-04Python網(wǎng)絡(luò)編程之ftplib模塊
這篇文章介紹了Python網(wǎng)絡(luò)編程之ftplib模塊,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05使用Django搭建網(wǎng)站實(shí)現(xiàn)商品分頁功能
這篇文章主要介紹了使用Django搭建網(wǎng)站實(shí)現(xiàn)商品分頁功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05Python 實(shí)現(xiàn)平臺類游戲添加跳躍功能
這篇文章主要介紹了Python 實(shí)現(xiàn)平臺類游戲添加跳躍功能,,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03Python數(shù)據(jù)庫反向生成Model最優(yōu)方案示例
這篇文章主要介紹了Python數(shù)據(jù)庫反向生成Model最優(yōu)方案的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07Python深入了解defaultdict之輕松處理默認(rèn)值與復(fù)雜數(shù)據(jù)結(jié)構(gòu)
在Python標(biāo)準(zhǔn)庫collections模塊中,defaultdict提供了一種在字典訪問不存在的鍵時(shí)自動(dòng)提供默認(rèn)值的便利方式,這篇文章詳細(xì)介紹了defaultdict的使用方法、基礎(chǔ)概念、創(chuàng)建實(shí)例的步驟以及應(yīng)用場景,需要的朋友可以參考下2024-09-09