亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python入門篇之正則表達式

系統(tǒng) 1865 0

?正則表達式有兩種基本的操作,分別是匹配和替換。

匹配就是在一個文本字符串中搜索匹配一特殊表達式;

替換就是在一個字符串中查找并替換匹配一特殊表達式的字符串。
?
1.基本元素
?
正則表達式定義了一系列的特殊字符元素以執(zhí)行匹配動作。

正則表達式基本字符

字符 描述
text 匹配text字符串
. 匹配除換行符之外的任意一個單個字符
^ 匹配一個字符串的開頭
$ 匹配一個字符串的末尾

在正則表達式中,我們還可用匹配限定符來約束匹配的次數(shù)。
?
匹配限定符

最大匹配 最小匹配 描述
* * 重復(fù)匹配前表達式零次或多次
+ + 重復(fù)匹配前表達式一次或多次
重復(fù)匹配前表達式零次或一次
{m} {m} 精確重復(fù)匹配前表達式m次
{m,} {m,} 至少重復(fù)匹配前表達式m次
{m,n} {m,n} 至少重復(fù)匹配前表達式m次,至多重復(fù)匹配前表達式n次

據(jù)上所述,".*"為最大匹配,能匹配源字符串所有能匹配的字符串。".* "為最小匹配,只匹配第一次出現(xiàn)的字符串。如:d.*g能匹配任意以d開頭,以g結(jié)尾的字符串,如"debug"和"debugging",甚至"dog is walking"。而d.* g只能匹配"debug",在"dog is walking"字符串中,則只匹配到"dog "。
?
在一些更復(fù)雜的匹配中,我們可用到組和運算符。
?
組和運算符

描述
[...] 匹配集合內(nèi)的字符,如[a-z],[1-9]或[,./;']
[^...] 匹配除集合外的所有字符,相當于取反操作
A|B 匹配表達式A或B,相當于OR操作
(...) 表達式分組,每對括號為一組,如([a-b]+)([A-Z]+)([1-9]+)
\number 匹配在number表達式組內(nèi)的文本

有一組特殊的字符序列,用來匹配具體的字符類型或字符環(huán)境。如\b匹配字符邊界,food\b匹配"food"、"zoofood",而和"foodies"不匹配。
?
特殊字符序列

字符 描述
\A 只匹配字符串的開始
\b 匹配一個單詞邊界
\B 匹配一個單詞的非邊界
\d 匹配任意十進制數(shù)字字符,等價于r'[0-9]'
\D 匹配任意非十進制數(shù)字字符,等價于r'[^0-9]'
\s 匹配任意空格字符(空格符、tab制表符、換行符、回車、換頁符、垂直線符號)
\S 匹配任意非空格字符
\w 匹配任意字母數(shù)字字符
\W 匹配任意非字母數(shù)字字符
\Z 僅匹配字符串的尾部
\\ 匹配反斜線字符

有一套聲明(assertion)對具體事件進行聲明。
?
正則表達式聲明

聲明 描述
( iLmsux) 匹配空字符串,iLmsux字符對應(yīng)下表的正則表達式修飾符。
( :...) 匹配圓括號內(nèi)定義的表達式,但不填充字符組表。
( P ) 匹配圓括號內(nèi)定義的表達式,但匹配的表達式還可用作name標識的符號組。
( P=name) 匹配所有與前面命名的字符組相匹配的文本。
( #...) 引入注釋,忽略圓括號內(nèi)的內(nèi)容。
( =...) 如果所提供的文本與下一個正則表達式元素匹配,這之間沒有多余的文本就匹配。這允許在一個表達式中進行超前操作,而不影響正則表達式其余部分的分析。如"Martin"其后緊跟"Brown",則"Martin( =Brown)"就只與"Martin"匹配。
( !...) 僅當指定表達式與下一個正則表達式元素不匹配時匹配,是( =...)的反操作。
( <=...) 如果字符串當前位置的前綴字符串是給定文本,就匹配,整個表達式就在當前位置終止。如( <=abc)def表達式與"abcdef"匹配。這種匹配是對前綴字符數(shù)量的精確匹配。
( > import re
>>> a="this is my re module test"
>>> obj = re.search(r'.*is',a)
>>> print obj
<_sre.SRE_Match object at 0xb7d7a218>
>>> obj.group()
'this is'
>>> re.findall(r'.*is',a)
['this is']

MatchObject對象方法

方法 描述
expand(template) 展開模板中用反斜線定義的內(nèi)容。
m.group([group,...]) 返回匹配的文本,是個元組。此文本是與給定group或由其索引數(shù)字定義的組匹配的文本,如果沒有組定組名,則返回所有匹配項。
m.groups([default]) 返回一個元組,該元組包含模式中與所有組匹配的文本。如果給出default參數(shù),default參數(shù)值就是與給定表達式不匹配的組的返回值。default參數(shù)的默認取值為None。
m.groupdict([default]) 返回一個字典,該字典包含匹配的所有子組。如果給出default參數(shù),其值就是那些不匹配組的返回值。default參數(shù)的默認取值為None。
m.start([group]) 返回指定group的開始位置,或返回全部匹配的開始位置。
m.end([group]) 返回指定group的結(jié)束位置,或返回全部匹配的結(jié)束位置。
m.span([group]) 返回兩元素組,此元組等價于關(guān)于一給定組或一個完整匹配表達式的(m.start(group),m.end(group)))列表
m.pos 傳遞給match()或search()函數(shù)的pos值。
m.endpos 傳遞給match()或search()函數(shù)的endpos值。
m.lastindex
m.lastgroup
m.re 創(chuàng)建這個MatchObject對象的正則式對象
m.string 提供給match()或search()函數(shù)的字符串。

使用sub()或subn()函數(shù)可在字符串上執(zhí)行替換操作。sub()函數(shù)的基本格式如下:
?sub(pattern,replace,string[,count])
?
示例

?

復(fù)制代碼 代碼如下:

>>> str = 'The dog on my bed'
>>> rep = re.sub('dog','cat',str)
>>> print rep
The cat on my bed

replace參數(shù)可接受函數(shù)。要獲得替換的次數(shù),可使用subn()函數(shù)。subn()函數(shù)返回一個元組,此元組包含替換了的文本和替換的次數(shù)。
?
如果需用同一個正則式進行多次匹配操作,我們可把正則式編譯成內(nèi)部語言,提高處理速度。編譯正則式用compile()函數(shù)來實現(xiàn)。compile()函數(shù)的基本格式如下:
?compile(str[,flags])
?
str表示需編譯的正則式串,flags是修飾標志符。正則式被編譯后生成一個對象,該對象有多種方法和屬性。
?
正則式對象方法/屬性

方法/屬性 描述
r.search(string[,pos[,endpos]]) 同search()函數(shù),但此函數(shù)允許指定搜索的起點和終點
r.match(string[,pos[,endpos]]) 同match()函數(shù),但此函數(shù)允許指定搜索的起點和終點
r.split(string[,max]) 同split()函數(shù)
r.findall(string) 同findall()函數(shù)
r.sub(replace,string[,count]) 同sub()函數(shù)
r.subn(replace,string[,count]) 同subn()函數(shù)
r.flags 創(chuàng)建對象時定義的標志
r.groupindex 將r'( Pid)'定義的符號組名字映射為組序號的字典
r.pattern 在創(chuàng)建對象時使用的模式

轉(zhuǎn)義字符串用re.escape()函數(shù)。
?
通過getattr獲取對象引用
?

復(fù)制代碼 代碼如下:

>>> li=['a','b']
>>> getattr(li,'append')
>>> getattr(li,'append')('c')????????? #相當于li.append('c')
>>> li
['a', 'b', 'c']
>>> handler=getattr(li,'append',None)
>>> handler

>>> handler('cc')????????????????????? #相當于li.append('cc')
>>> li
['a','b','c','cc']
>>>result = handler('bb')
>>>li
['a','b','c','cc','bb']
>>>print result
None


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日本乱中文字幕系列在线观看 | 欧美激情在线播放 | 精品国产不卡一区二区三区 | www色午夜| 久久综合久久久久 | 再猛点深使劲爽日本免费视频 | 欧美日韩中文字幕在线视频 | 97视频在线免费 | 国内精品免费一区二区三区 | 国产精品久久久久久久久久久搜索 | 日日干夜夜欢 | 国产亚洲精品精品国产亚洲综合 | 国产在线19禁免费观看国产 | 色综合网亚洲精品久久久 | 牛牛a级毛片在线播放 | 四虎影视在线影院在线观看 | 伊人中文字幕在线 | 国产成人精品日本亚洲语言 | 亚洲综合首页 | 欧美精品久久久久久久影视 | 色老头xxxxbbbb视频 | 伊人影视频 | 性生活视频免费观看 | 中国一级一级全黄 | 国产精品玖玖玖在线观看 | 欧美人成毛片在线播放 | 国产欧美精品专区一区二区 | 国产精品九九 | 99精品免费 | 二区三区 | 噜噜嘿在线视频免费观看 | 日本高清不卡二区 | 久久久久久久网 | 北岛玲日韩精品一区二区三区 | 成人免费观看视频久爱网 | 久久看片 | 亚洲欧美久久精品一区 | 黄色片免费在线观看视频 | 狠狠色狠狠色88综合日日91 | 亚洲qingse| 国产成人精品男人的天堂网站 |