真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

python中re模塊簡析-創(chuàng)新互聯(lián)

re的分組功能

python的re模塊有一個分組功能。所謂的分組就是去已經(jīng)匹配到的內(nèi)容里面再篩選出需要的內(nèi)容,相當于二次過濾。

成都地區(qū)優(yōu)秀IDC服務(wù)器托管提供商(成都創(chuàng)新互聯(lián)公司).為客戶提供專業(yè)的大邑服務(wù)器托管,四川各地服務(wù)器托管,大邑服務(wù)器托管、多線服務(wù)器托管.托管咨詢專線:13518219792

實現(xiàn)分組靠圓括號(),而獲得分組的內(nèi)容靠的是group(),groups(),groupdict()方法。

re模塊里的幾個重要方法在分組上,有不同的表現(xiàn)形式,需要區(qū)別對待。

re實例

match()方法

不分組時的情況:

import re

origin = "hasdfi123123safd"
# 不分組時的情況
r = re.match("h\w+", origin)
print(r.group())         # 獲取匹配到的整體結(jié)果
print(r.groups())        # 獲取模型中匹配到的分組結(jié)果元組
print(r.groupdict())     # 獲取模型中匹配到的分組中所有key的字典

結(jié)果:
hasdfi123123safd
()
{}

有分組的情況(注意圓括號?。?/h4>
import re

origin = "hasdfi123123safd123"
# 有分組
r = re.match("h(\w+).*(?P\d)$", origin)
print(r.group())  # 獲取匹配到的整體結(jié)果
print(r.group(1))  # 獲取匹配到的分組1的結(jié)果
print(r.group(2))  # 獲取匹配到的分組2的結(jié)果
print(r.groups())  # 獲取模型中匹配到的分組結(jié)果元組
print(r.groupdict())  # 獲取模型中匹配到的分組中所有key的字典

執(zhí)行結(jié)果:
hasdfi123123safd123
asdfi123123safd12
3
('asdfi123123safd12', '3')
{'name': '3'}

說明??:

  • (1)正則表達式h(\w+).*(?P<name>\d)$中有2個小括號,表示它分了2個小組,在匹配的時候是拿整體的表達式去匹配的,而不是拿小組去匹配的。

  • (2)(\w+)表示這個小組內(nèi)是1到多個字母數(shù)字字符,相當于匹配包括下劃線的任何單詞字符。等價于'[A-Za-z0-9_]'。

  • (3)(?P<name>\d)?P<name>是個正則表達式的特殊語法,表示給這個小組取了個叫“name”的名字,?P<xxxx>是固定寫法。\d匹配一個數(shù)字字符。等價于[0-9]。

  • (4)在獲取分組值的時候,group()和group(0)是對等的,都表示整個匹配到的字符串,從group(1)開始,分別是從左往右的小組序號,按位置順序來。

search()方法

有分組的情況:

import re

origin = "sdfi1ha23123safd123"      # 注意這里對匹配對象做了下調(diào)整
# 有分組
r = re.search("h(\w+).*(?P\d)$", origin)
print(r.group())  
print(r.group(0))  
print(r.group(1))  
print(r.group(2))
print(r.groups())  
print(r.groupdict()) 

執(zhí)行結(jié)果:
ha23123safd123
ha23123safd123
a23123safd12
3
('a23123safd12', '3')
{'name': '3'}

說明??:表現(xiàn)得和match()方法基本一樣。

match()方法與search()方法區(qū)別

re.match只匹配字符串的開始,如果字符串開始不符合正則表達式,則匹配失敗,函數(shù)返回None;而re.search匹配整個字符串,直到找到一個匹配。

舉例如下:

#!/usr/bin/python
import re

line = "Cats are smarter than dogs";

matchObj = re.match( r'dogs', line, re.M|re.I)
if matchObj:
   print "match --> matchObj.group() : ", matchObj.group()
else:
   print "No match!!"

matchObj = re.search( r'dogs', line, re.M|re.I)
if matchObj:
   print "search --> matchObj.group() : ", matchObj.group()
else:
   print "No match!!"

以上代碼執(zhí)行結(jié)果如下:

No match!!
search --> matchObj.group() :  dogs

擴展

正則表達式實例:

#!/usr/bin/python
import re
line = "Cats are smarter than dogs"
matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)
if matchObj:
    print "matchObj.group() : ", matchObj.group()
    print "matchObj.group(1) : ", matchObj.group(1)
    print "matchObj.group(2) : ", matchObj.group(2)
else:
    print "No match!!"

說明??:關(guān)于正則表達式r'(.*) are (.*?) .*'

  • (1)首先,這是一個字符串,前面的一個 r 表示字符串為非轉(zhuǎn)義的原始字符串,讓編譯器忽略反斜杠,也就是忽略轉(zhuǎn)義字符。但是這個字符串里沒有反斜杠,所以這個 r 可有可無。

  • (2)(.) 第一個匹配分組,. 代表匹配除換行符之外的所有字符。

  • (3)(.?) 第二個匹配分組,.? 后面多個問號,代表非貪婪模式,也就是說只匹配符合條件的最少字符。

  • (4)后面的一個 .* 沒有括號包圍,所以不是分組,匹配效果和第一個一樣,但是不計入匹配結(jié)果中。

  • (5)matchObj.group() 等同于 matchObj.group(0),表示匹配到的完整文本字符

    matchObj.group(1) 得到第一組匹配結(jié)果,也就是(.*)匹配到的

    matchObj.group(2) 得到第二組匹配結(jié)果,也就是(.*?)匹配到的

    因為只有匹配結(jié)果中只有兩組,所以如果填 3 時會報錯。

參考文檔

  • 劉江python教程

  • python正則表達式01-re

  • python正則表達式02-re

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


當前文章:python中re模塊簡析-創(chuàng)新互聯(lián)
分享路徑:http://weahome.cn/article/gigcc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部