欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python知識(shí)點(diǎn)詳解之正則表達(dá)式語(yǔ)法

 更新時(shí)間:2022年05月31日 10:03:11   作者:夢(mèng)想橡皮擦  
正則表達(dá)式在搜索大型文本、電子郵件和文檔時(shí)非常有用,正則表達(dá)式也稱(chēng)為"用于字符串匹配的編程語(yǔ)言",下面這篇文章主要給大家介紹了關(guān)于Python知識(shí)點(diǎn)之正則表達(dá)式語(yǔ)法的相關(guān)資料,需要的朋友可以參考下

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)容即可。

操作符說(shuō)明例子
.任何單個(gè)字符,極少不能匹配 
[]字符集,對(duì)單個(gè)字符給出取值范圍[abc] 表示匹配 a、b、c,[a-z] 表示 a 到 z 單個(gè)字符
[^]非字符集,對(duì)單個(gè)字符給出排除范圍[^abc] 表示匹配 非 a、非 b、非 c 的單個(gè)字符
*前一個(gè)字符 0 次或無(wú)限次擴(kuò)展abc* 表示 ab、abc、abcc、abccc 等
+前一個(gè)字符 1 次或無(wú)限次擴(kuò)展abc+ 表示 abc、abcc、abccc 等
?前一個(gè)字符 0 次或 1 次abc? 表示 ab、abc
|左右表達(dá)式任意一個(gè)abc|def 表示 abc 或者 def
{m}擴(kuò)展前 1 個(gè)字符 m 次ab{2}c,表示 abbc
{m,n}擴(kuò)展前 1 個(gè)字符 m 到 n 次ab{1,2}c,表示 abc、abbc
^匹配字符串開(kāi)頭^abc 表示 abc 在字符串開(kāi)頭
$匹配字符串結(jié)尾abc$ 表示 abc 在字符串結(jié)尾
()分組標(biāo)記,內(nèi)部?jī)H能使用 | 操作符(abc) 表示 abc,(a
\d數(shù)字,等價(jià)于 [0-9] 
\w字符,等價(jià)于 [A-Za-z0-9] 

以上表示僅僅為正則表達(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é)果:<re.Match object; span=(2, 5), match='橡皮擦'>。

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ù)

該函數(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í)下去。

總結(jié)

到此這篇關(guān)于Python知識(shí)點(diǎn)詳解之正則表達(dá)式語(yǔ)法的文章就介紹到這了,更多相關(guān)Python正則表達(dá)式語(yǔ)法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python實(shí)現(xiàn)文件操作幫助類(lèi)的示例代碼

    Python實(shí)現(xiàn)文件操作幫助類(lèi)的示例代碼

    在使用Python進(jìn)行業(yè)務(wù)開(kāi)發(fā)的時(shí)候,需要將一些數(shù)據(jù)保存到本地文件存儲(chǔ),方便后面進(jìn)行數(shù)據(jù)分析展示,本文就來(lái)用Python制作一個(gè)文件操作幫助類(lèi),需要的可以參考一下
    2023-03-03
  • python實(shí)現(xiàn)圖像降噪

    python實(shí)現(xiàn)圖像降噪

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)圖像降噪,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Python+Pytest實(shí)現(xiàn)壓力測(cè)試詳解

    Python+Pytest實(shí)現(xiàn)壓力測(cè)試詳解

    在現(xiàn)代Web應(yīng)用程序中,性能是至關(guān)重要的。為了確保應(yīng)用程序能夠在高負(fù)載下正常運(yùn)行,我們需要進(jìn)行性能測(cè)試。本文就來(lái)用Pytest進(jìn)行壓力測(cè)試,希望對(duì)大家有所幫助
    2023-03-03
  • Python入門(mén)篇之字符串

    Python入門(mén)篇之字符串

    可能大多數(shù)人在學(xué)習(xí)C語(yǔ)言的時(shí)候,最先接觸的數(shù)據(jù)類(lèi)型就是字符串,因?yàn)榇蠖嘟坛潭际且?quot;Hello world"這個(gè)程序作為入門(mén)程序,這個(gè)程序中要打印的"Hello world"就是字符串。今天我們來(lái)了解一下Python中的字符串,看看它的用法。
    2014-10-10
  • python生成九宮格圖片

    python生成九宮格圖片

    這篇文章主要為大家詳細(xì)介紹了python生成九宮格圖片,利用Image類(lèi)將一張圖片分割成9張,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Python命名空間與作用域深入全面詳解

    Python命名空間與作用域深入全面詳解

    命名空間是從名稱(chēng)到對(duì)象的映射,大部分的命名空間都是通過(guò) Python 字典來(lái)實(shí)現(xiàn)的,作用域就是一個(gè)可以直接訪問(wèn)命名空間的正文區(qū)域。程序的變量并不是在哪個(gè)位置都可以訪問(wèn)的,訪問(wèn)權(quán)限決定于這個(gè)變量是在哪里賦值的
    2022-11-11
  • 解決安裝新版PyQt5、PyQT5-tool后打不開(kāi)并Designer.exe提示no Qt platform plugin的問(wèn)題

    解決安裝新版PyQt5、PyQT5-tool后打不開(kāi)并Designer.exe提示no Qt platform plug

    這篇文章主要介紹了解決安裝新版PyQt5、PyQT5-tool后打不開(kāi)并Designer.exe提示no Qt platform plugin的問(wèn)題,需要的朋友可以參考下
    2020-04-04
  • python對(duì)數(shù)組進(jìn)行反轉(zhuǎn)的方法

    python對(duì)數(shù)組進(jìn)行反轉(zhuǎn)的方法

    這篇文章主要介紹了python對(duì)數(shù)組進(jìn)行反轉(zhuǎn)的方法,涉及Python中reverse方法的使用技巧,需要的朋友可以參考下
    2015-05-05
  • python編程webpy框架模板之def with學(xué)習(xí)

    python編程webpy框架模板之def with學(xué)習(xí)

    這篇文章主要為大家介紹了python編程web.py框架模板之def with的學(xué)習(xí)有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-11-11
  • Python發(fā)送郵件的實(shí)例代碼講解

    Python發(fā)送郵件的實(shí)例代碼講解

    在本篇文章里小編給大家整理的是關(guān)于Python發(fā)送郵件的實(shí)例代碼講解內(nèi)容,需要的朋友們可以參考下。
    2019-10-10

最新評(píng)論