激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術(shù)及教程分享平臺(tái)!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - python模塊之re正則表達(dá)式詳解

python模塊之re正則表達(dá)式詳解

2020-09-19 15:16BugsBunny Python

正則表達(dá)式是一種小型的、高度專業(yè)化的編程語言,并不是python中特有的,是許多編程語言中基礎(chǔ)而又重要的一部分。在python中,主要通過re模塊來實(shí)現(xiàn)。這篇文章主要介紹了python模塊之re正則表達(dá)式詳解,需要的朋友可以參考下

一、簡(jiǎn)單介紹

正則表達(dá)式是一種小型的、高度專業(yè)化的編程語言,并不是python中特有的,是許多編程語言中基礎(chǔ)而又重要的一部分。在python中,主要通過re模塊來實(shí)現(xiàn)。

正則表達(dá)式模式被編譯成一系列的字節(jié)碼,然后由用c編寫的匹配引擎執(zhí)行。那么正則表達(dá)式通常有哪些使用場(chǎng)景呢?

比如為想要匹配的相應(yīng)字符串集指定規(guī)則;

該字符串集可以是包含e-mail地址、Internet地址、電話號(hào)碼,或是根據(jù)需求自定義的一些字符串集;

當(dāng)然也可以去判斷一個(gè)字符串集是否符合我們定義的匹配規(guī)則;

找到字符串中匹配該規(guī)則的部分內(nèi)容;

修改、切割等一系列的文本處理;

......

二、特殊符號(hào)和字符(元字符)

這里介紹常見的一些元字符,它給予正則表達(dá)式強(qiáng)大的功能和靈活性。表2-1列出了比較常見的符號(hào)和字符。

python模塊之re正則表達(dá)式詳解

三、正則表達(dá)式

1、使用 compile()函數(shù)編譯正則表達(dá)式

由于python代碼最終會(huì)被翻譯成字節(jié)碼,然后在解釋器上執(zhí)行。所以對(duì)于我們代碼中經(jīng)常要用到的一些正則表達(dá)式進(jìn)行預(yù)編譯,執(zhí)行起來會(huì)更加便捷。

re模塊中的大多數(shù)函數(shù)和已經(jīng)編譯的正則表達(dá)式對(duì)象和正則匹配對(duì)象的方法同名并且具有相同的功能。

示例:

?
1
2
3
4
5
6
7
8
9
10
11
>>> import re
>>> r1 = r'bugs'       # 字符串前加"r"反斜杠就不會(huì)被任何特殊方式處理,這是個(gè)習(xí)慣,雖然這里沒用到
>>> re.findall(r1, 'bugsbunny')    # 直接利用re模塊進(jìn)行解釋性地匹配
['bugs']      
>>>
>>> r2 = re.compile(r1)      # 如果r1這個(gè)匹配規(guī)則你會(huì)經(jīng)常用到,為了提高效率,那就進(jìn)行預(yù)編譯吧
>>> r2          # 編譯后的正則對(duì)象
<_sre.SRE_Pattern object at 0x7f5d7db99bb0>
>>>
>>> r2.findall('bugsbunny')     # 訪問對(duì)象的findall方法得到的匹配結(jié)果與上面是一致的
['bugs']         # 所以說,re模塊中的大多數(shù)函數(shù)和已經(jīng)編譯的正則表達(dá)式對(duì)象和正則匹配對(duì)象的方法同名并且具有相同的功能

re.compile()函數(shù)也接受可選的標(biāo)志參數(shù),常用來實(shí)現(xiàn)不同的特殊功能和語法變更。這些標(biāo)志也可以作為參數(shù)適用于大多數(shù)re模塊函數(shù)。這些標(biāo)志可以用操作法(|)合并。

示例:

?
1
2
3
4
5
>>> import re
>>> r1 = r'bugs'
>>> r2 = re.compile(r1,re.I) # 這里選擇的是忽略大小寫的標(biāo)志,完整的是re.IGNORECASE,這里簡(jiǎn)寫re.I
>>> r2.findall('BugsBunny')
['Bugs']<br><br># re.S 使.匹配換行符在內(nèi)的所有字符<br># re.M 多行匹配,英雄^和$<br># re,X 用來使正則匹配模式組織得更加清晰

完整的標(biāo)志參數(shù)列表和用法可以參考相關(guān)官方文檔。

2、使用正則表達(dá)式

re模塊提供了一個(gè)正則表達(dá)式引擎的接口,下面具體介紹一些常用的函數(shù)和方法。

匹配對(duì)象以及group()和groups()方法

當(dāng)處理正則表達(dá)式時(shí),除了正則表達(dá)式對(duì)象之外,還有一個(gè)對(duì)象類型:匹配對(duì)象。這些是成功調(diào)用 match()或者search()返回的對(duì)象。匹配對(duì)象有兩個(gè)主要的方法:group()和groups()。

group()要么返回整個(gè)匹配對(duì)象,要么根據(jù)要求返回特定子組。groups()則僅返回一個(gè)包含唯一或者全部子組的元組。如果沒有子組的要求,那么當(dāng)group()仍然返回整個(gè)匹配時(shí),groups返回一個(gè)空元組。下面一些函數(shù)示例會(huì)演示到此方法。

使用 match()方法匹配字符串

match()函數(shù)從字符串的起始部分對(duì)模式進(jìn)行匹配。如果匹配成功,就返回一個(gè)匹配對(duì)象;如果匹配失敗,就返回 None,匹配對(duì)象的方法 group()方法就能夠用于顯示那個(gè)成功的匹配。

示例如下:

?
1
2
3
4
5
>>> m = re.match('bugs', 'bugsbunny'# 模式匹配字符串
>>> if m is not None:      # 如果匹配成功,就輸出匹配內(nèi)容
...  m.group()
...
'bugs'<br>>>> m<br><_sre.SRE_Match object at 0x7f5d7da1f168> # 確認(rèn)返回的匹配對(duì)象

使用search()在一個(gè)字符串中查找模式

search()的工作方式與match()完全一致,不同之處在于search()是對(duì)給定正則表達(dá)式模式搜索第一次出現(xiàn)的匹配情況。簡(jiǎn)單來說,就是在任意位置符合都能匹配成功,不僅僅是字符串的起始部分,這就是與match()函數(shù)的區(qū)別,用腳指頭想想search()方法使用的范圍更多更廣。

示例:

?
1
2
3
4
5
>>> m = re.search('bugs', 'hello bugsbunny')
>>> if m is not None:
...  m.group()
...
'bugs'

 使用findall()和finditer()查找每一次出現(xiàn)的位置

findall()是用來查找字符串中所有(非重復(fù))出現(xiàn)的正則表達(dá)式模式,并返回一個(gè)匹配列表;finditer()與findall()不同的地方是返回一個(gè)迭代器,對(duì)于每一次匹配,迭代器都返回一個(gè)匹配對(duì)象。

?
1
2
3
4
5
6
7
8
>>> m = re.findall('bugs', 'bugsbunnybugs')
>>> m
['bugs', 'bugs']
>>> m = re.finditer('bugs', 'bugsbunnybugs')
>>> m.next()         # 迭代器用next()方法返回一個(gè)匹配對(duì)象
<_sre.SRE_Match object at 0x7f5d7da71a58# 匹配用group()方法顯示出來
>>> m.next().group()
'bugs'

使用sub()和subn()搜索與替換

都是將某字符串中所有匹配正則表達(dá)式的部分進(jìn)行某種形式的替換。sub()返回一個(gè)用來替換的字符串,可以定義替換次數(shù),默認(rèn)替換所有出現(xiàn)的位置。subn()和sub()一樣,但subn()還返回一個(gè)表示替換的總是,替換后的字符串和表示替換總數(shù)一起作為一個(gè)擁有兩個(gè)元素的元組返回。

示例:

?
1
2
3
4
>>> r = 'a.b'
>>> m = 'acb abc aab aac'
>>> re.sub(r,'hello',m)
'hello abc hello aac'<br>>>> re.subn(r,'hello',m)<br>('hello abc hello aac', 2)

字符串也有一個(gè)replace()方法,當(dāng)遇到一些模糊搜索替換的時(shí)候,就需要更為靈活的sub()方法了。

使用split()分割字符串

同樣的,字符串中也有split(),但它也不能處理正則表達(dá)式匹配的分割。在re模塊中,分居正則表達(dá)式的模式分隔符,split函數(shù)將字符串分割為列表,然后返回成功匹配的列表。

示例:

?
1
2
3
>>> s = '1+2-3*4'
>>> re.split(r'[+-*]',s)
['1', '2', '3', '4']

分組

有時(shí)在匹配的時(shí)候我們只想提取一些想要的信息或者對(duì)提取的信息作一個(gè)分類,這時(shí)就需要對(duì)正則匹配模式進(jìn)行分組,只需要加上()即可。

示例:

?
1
2
3
4
5
6
7
8
9
>>> m = re.match('(w{3})-(d{3})','abc-123')
>>> m.group()  # 完整匹配     
'abc-123'
>>> m.group(1# 子組1
'abc'
>>> m.group(2# 子組2
'123'
>>> m.groups()  # 全部子組
('abc', '123')

由以上的例子可以看出,group()通常用于以普通方式顯示所有的匹配部分,但也能用于獲取各個(gè)匹配的子組。可以使用groups()方法來獲取一個(gè)包含所有匹配字符串的元組。

以上所述是小編給大家介紹的python模塊之re正則表達(dá)式詳解,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)服務(wù)器之家網(wǎng)站的支持!

原文鏈接:http://www.cnblogs.com/bugsbunny/archive/2017/02/03/6308852.html

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 麻豆视频国产在线观看 | 男女羞羞视频在线免费观看 | 国产在线观看 | 国产精品自在线拍 | 免费一区在线 | 国产成人高潮免费观看精品 | 午夜激情视频免费 | 日韩视频一区在线 | 99精品视频免费 | 久久久国产电影 | 国产免费区 | 日韩精品网站在线观看 | av手机在线免费播放 | 欧美亚洲综合网 | 小雪奶水翁胀公吸小说最新章节 | 国产精品久久久久久久久久iiiii | gril hd| 蜜桃精品视频在线观看 | 国产一区二区三区精品在线观看 | 毛片免费大全短视频 | 超碰人人做人人爱 | 毛片一区二区三区四区 | 国产91亚洲精品久久久 | 精品中文字幕视频 | 国产a级片电影 | 亚洲婷婷日日综合婷婷噜噜噜 | 欧美性生交大片 | 国产最新网站 | 久久男人的天堂 | 国产999精品久久久久 | 久久久久亚洲美女啪啪 | 国产美女视频一区二区三区 | 久久久久久亚洲综合影院红桃 | 久久久成人免费视频 | 欧美 日韩 国产 在线 | 精品一区二区免费视频视频 | 黄色片快播 | 久久国产精品二国产精品中国洋人 | 黄色成人小视频 | 国产亚洲综合精品 | 成人免费在线视频 |