寫(xiě)給朋友Python知識(shí)點(diǎn),正則表達(dá)式,Y19

      網(wǎng)友投稿 817 2022-05-30

      Python 正則表達(dá)式是什么

      學(xué)習(xí) Python 正則表達(dá)式離不開(kāi) re 模塊,所以本篇博客會(huì)配合 re 模塊進(jìn)行編寫(xiě)。

      re 庫(kù)是 Python 中處理正則表達(dá)式的標(biāo)準(zhǔn)庫(kù),本篇博客介紹 re 庫(kù)的同時(shí),會(huì)簡(jiǎn)單介紹一下正則表達(dá)式語(yǔ)法,

      如果想深入學(xué)習(xí)正則表達(dá)式,還需要好好下一番功夫。

      怎么用

      正則表達(dá)式語(yǔ)法

      正則表達(dá)式語(yǔ)法由字符和操作符構(gòu)成,初期階段掌握下述這些內(nèi)容即可。

      以上表示僅僅為正則表達(dá)最基礎(chǔ)部分內(nèi)容,如果希望深入研究正則表達(dá)式,建議尋找更加全面的資料進(jìn)行學(xué)習(xí),本文只做藥引。

      re 庫(kù)基本用法

      re 庫(kù)主要函數(shù)如下:

      基礎(chǔ)函數(shù):compile;

      功能函數(shù):search、match、findall、split、finditer、sub。

      在正式學(xué)習(xí)之前,先了解一下原生字符串。

      在 Python 中,表示原生字符串,需要在字符串前面加上 r。

      例如 my_str = 'i'am xiangpica' 在程序中會(huì)直接報(bào)錯(cuò),

      如果希望字符串中 ' 可以正常運(yùn)行,需要加上轉(zhuǎn)移字符 \,修改為 my_str = 'i\'am xiangpica'。

      但這樣結(jié)合上文正則表達(dá)式中的操作符,就會(huì)出現(xiàn)問(wèn)題,因?yàn)?\ 在正則表達(dá)式中是有真實(shí)含義的,

      如果你使用 re 庫(kù)去匹配字符串中的 \,那需要使用 4 個(gè)反斜杠,為了避免這種情況出現(xiàn),引入了原生字符串概念。

      # 不使用原生字符串的正則表達(dá)式 "\\" # 使用原生字符串的正則表達(dá)式 r"\"

      在后文會(huì)有實(shí)際的應(yīng)用。

      接下來(lái)在學(xué)習(xí)一個(gè)案例,例如下述代碼:

      my_str='C:\number' print(my_str)

      C: umber

      本段代碼的輸出效果如下,\n 被解析成了換行,如果想要屏蔽這種現(xiàn)象,使用 r 即可:

      my_str=r'C:\number' print(my_str)

      輸出 C:\number。

      re.search 函數(shù)

      該函數(shù)用于,在字符串中搜索正則表達(dá)式匹配到的第一個(gè)位置的值,返回 match 對(duì)象。

      函數(shù)原型如下:

      re.search(pattern,string,flags=0)

      需求:在字符串 夢(mèng)想橡皮擦 good good 中匹配 橡皮擦。

      import re my_str='夢(mèng)想橡皮擦 good good' pattern = r'橡皮擦' ret = re.search(pattern,my_str) print(ret)

      返回結(jié)果:

      search 函數(shù)的第三個(gè)參數(shù) flags 表示正則表達(dá)式使用時(shí)的控制標(biāo)記。

      re.I,re.IGNORECASE:忽略正則表達(dá)式的大小寫(xiě);

      re.M,re.MULTILINE:正則表達(dá)式中的 ^ 操作符能夠?qū)⒔o定字符串的每行當(dāng)做匹配的開(kāi)始;

      re.S,re.DOTALL:正則表達(dá)式中的 . 操作符能夠匹配所有字符。

      最后將匹配到的字符串進(jìn)行輸出,使用下述代碼即可實(shí)現(xiàn)。

      import re my_str = '夢(mèng)想橡皮擦 good good' pattern = r'橡皮擦' ret = re.search(pattern, my_str) if ret: print(ret.group(0))

      re.match 函數(shù)

      寫(xiě)給朋友的Python知識(shí)點(diǎn),正則表達(dá)式,Y19

      該函數(shù)用于在目標(biāo)字符串開(kāi)始位置去匹配正則表達(dá)式,返回 match 對(duì)象,未匹配成功返回 None,函數(shù)原型如下:

      re.match(pattern,string,flags=0)

      一定要注意是目標(biāo)字符串開(kāi)始位置。

      import re my_str = '夢(mèng)想橡皮擦 good good' pattern = r'夢(mèng)' # 匹配到數(shù)據(jù) pattern = r'good' # 匹配不到數(shù)據(jù) ret = re.match(pattern, my_str) if ret: print(ret.group(0))

      re.match 和 re.search 方法都是一次最多返回一個(gè)匹配對(duì)象,如果希望返回多個(gè)值,

      可以通過(guò)在 pattern 里加括號(hào)構(gòu)造匹配組返回多個(gè)字符串。

      re.findall 函數(shù)

      該函數(shù)用于搜索字符串,以列表格式返回全部匹配到的字符串,函數(shù)原型如下:

      re.findall(pattern,string,flags=0)

      測(cè)試代碼如下:

      import re my_str = '夢(mèng)想橡皮擦 good good' pattern = r'good' ret = re.findall(pattern, my_str) print(ret)

      re.split 函數(shù)

      該函數(shù)將一個(gè)字符串按照正則表達(dá)式匹配結(jié)果進(jìn)行分割,返回一個(gè)列表。

      函數(shù)原型如下:

      re.split(pattern, string, maxsplit=0, flags=0)

      re.split 函數(shù)進(jìn)行分割的時(shí)候,如果正則表達(dá)式匹配到的字符恰好在字符串開(kāi)頭或者結(jié)尾,

      返回分割后的字符串列表首尾都多了空格,需要手動(dòng)去除,例如下述代碼:

      import re my_str = '1夢(mèng)想橡皮擦1good1good1' pattern = r'\d' ret = re.split(pattern, my_str) print(ret)

      運(yùn)行結(jié)果:

      ['', '夢(mèng)想橡皮擦', 'good', 'good', '']

      切換為中間的內(nèi)容,則能正確的分割字符串。

      import re my_str = '1夢(mèng)想橡皮擦1good1good1' pattern = r'good' ret = re.split(pattern, my_str) print(ret)

      如果在 pattern 中捕獲到括號(hào),那括號(hào)中匹配到的結(jié)果也會(huì)在返回的列表中。

      import re my_str = '1夢(mèng)想橡皮擦1good1good1' pattern = r'(good)' ret = re.split(pattern, my_str) print(ret)

      運(yùn)行結(jié)果,你可以對(duì)比帶括號(hào)和不帶括號(hào)的區(qū)別進(jìn)行學(xué)習(xí):

      ['1夢(mèng)想橡皮擦1', 'good', '1', 'good', '1']

      maxsplit 參數(shù)表示最多進(jìn)行分割次數(shù), 剩下的字符全部返回到列表的最后一個(gè)元素,

      例如設(shè)置匹配 1 次,得到的結(jié)果是 ['1夢(mèng)想橡皮擦1', '1good1']。

      re.finditer 函數(shù)

      搜索字符串,并返回一個(gè)匹配結(jié)果的迭代器,每個(gè)迭代元素都是 match 對(duì)象。

      函數(shù)原型如下:

      re.finditer(pattern,string,flags=0)

      測(cè)試代碼如下:

      import re my_str = '1夢(mèng)想橡皮擦1good1good1' pattern = r'good' # ret = re.split(pattern, my_str,maxsplit=1) ret =re.finditer(pattern, my_str) print(ret)

      re.sub 函數(shù)

      在一個(gè)字符串中替換被正則表達(dá)式匹配到的字符串,返回替換后的字符串,

      函數(shù)原型如下:

      re.sub(pattern,repl,string,count=0,flags=0)

      其中 repl 參數(shù)是替換匹配字符串的字符串,count 參數(shù)是匹配的最大替換次數(shù)。

      import re my_str = '1夢(mèng)想橡皮擦1good1good1' pattern = r'good' ret = re.sub(pattern, "nice", my_str) print(ret)

      運(yùn)行之后,得到替換之后的字符串:

      1夢(mèng)想橡皮擦1nice1nice1

      re 庫(kù)其它函數(shù)

      其它比較常見(jiàn)的函數(shù)有:re.fullmatch(),re.subn(),re.escape(),

      更多內(nèi)容可以查閱 官方文檔,獲取一手資料。

      擴(kuò)展知識(shí)

      使用 re 庫(kù)匹配字符串之后,會(huì)返回 match 對(duì)象,該對(duì)象具備以下屬性和方法。

      你可以順著這條線繼續(xù)學(xué)習(xí)下去。

      Python 正則表達(dá)式

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:單片機(jī)理論與實(shí)踐課程總結(jié)與補(bǔ)充材料
      下一篇:兩地三中心部署TiDB數(shù)據(jù)庫(kù)高可用環(huán)境
      相關(guān)文章
      亚洲区不卡顿区在线观看| 日韩亚洲人成在线| 亚洲AV永久无码精品网站在线观看| 婷婷亚洲久悠悠色悠在线播放| 亚洲色偷偷偷鲁综合| 国产亚洲精品无码专区| 国产AV日韩A∨亚洲AV电影| 久久亚洲中文字幕无码| 午夜亚洲福利在线老司机| 久久久久亚洲精品无码蜜桃| 亚洲av伊人久久综合密臀性色| 激情综合色五月丁香六月亚洲| 亚洲精品无码成人片在线观看| 亚洲欧洲日本在线| 激情小说亚洲图片| mm1313亚洲国产精品美女| 国产亚洲成在线播放va| 亚洲精品无码久久不卡| 久久久久一级精品亚洲国产成人综合AV区 | 风间由美在线亚洲一区| 婷婷亚洲天堂影院| 亚洲人成人网站在线观看| 中国亚洲女人69内射少妇| 久久精品国产亚洲沈樵| 亚洲午夜精品久久久久久人妖| 亚洲综合色丁香麻豆| 久久久无码精品亚洲日韩蜜臀浪潮| 亚洲成电影在线观看青青| 亚洲a级在线观看| 亚洲国产精品18久久久久久| 国产成人亚洲综合无| 国产精品亚洲综合专区片高清久久久 | 亚洲精品无码久久久久牙蜜区| WWW国产亚洲精品久久麻豆| 亚洲VA综合VA国产产VA中| 国产精一品亚洲二区在线播放| 亚洲v高清理论电影| 亚洲免费在线视频播放| 亚洲成在人线在线播放无码 | 久久亚洲国产成人精品性色| 亚洲不卡视频在线观看|