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ù)庫(kù)
- re.X 為了增加可讀性,忽略空格和 # 后面的注釋
示例代碼:【檢查字符串是否以 "Long" 開(kāi)頭并以 "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è)小括號(hào)的內(nèi)容
print(ret.group(2)) # 匹配第2個(gè)小括號(hào)的內(nèi)容
print(ret.group(3)) # 匹配第3個(gè)小括號(hào)的內(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è)小括號(hào)的內(nèi)容
print(ret.group(2)) # 匹配第2個(gè)小括號(hào)的內(nèi)容
print(ret.group(3)) # 匹配第3個(gè)小括號(hào)的內(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>但愿人長(zhǎng)久</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ù)中就沒(méi)必要帶re.S,比如匹配第4個(gè)和第5個(gè)li標(biāo)簽中的歌手和歌名。但是re.search也僅僅是返回一個(gè)符合匹配的結(jié)果。如果我們要返回符合匹配的所有結(jié)果,要用到re.findall。這一節(jié)的re.search就說(shuō)到這里。
總結(jié)
到此這篇關(guān)于Python正則表達(dá)式re.search()用法詳解的文章就介紹到這了,更多相關(guān)Python re.search()用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Pytorch-mlu?實(shí)現(xiàn)添加逐層算子方法詳解
本文主要分享了在寒武紀(jì)設(shè)備上?pytorch-mlu?中添加逐層算子的方法教程,代碼具有一定學(xué)習(xí)價(jià)值,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-11-11
用python實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了用python實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07
python爬蟲(chóng)神器Pyppeteer入門及使用
這篇文章主要介紹了python爬蟲(chóng)神器Pyppeteer入門及使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07
python環(huán)境的報(bào)錯(cuò)解決方法
這篇文章主要為大家介紹了python環(huán)境的報(bào)錯(cuò)解決方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
Python制作簡(jiǎn)易版小工具之計(jì)算天數(shù)的實(shí)現(xiàn)思路
這篇文章主要介紹了Python制作簡(jiǎn)易版小工具之計(jì)算天數(shù)的實(shí)現(xiàn)思路,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02
Python 經(jīng)典算法100及解析(小結(jié))
這篇文章主要介紹了Python 經(jīng)典算法100及解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
Python多個(gè)MP4合成視頻的實(shí)現(xiàn)方法
最近接觸了個(gè)項(xiàng)目,需要把多個(gè)文件合成一個(gè)視頻,本文主要使用Python把多個(gè)MP4合成視頻,感興趣的可以了解一下2021-07-07

