?正則表達(dá)式有兩種基本的操作,分別是匹配和替換。
匹配就是在一個(gè)文本字符串中搜索匹配一特殊表達(dá)式;
替換就是在一個(gè)字符串中查找并替換匹配一特殊表達(dá)式的字符串。
?
1.基本元素
?
正則表達(dá)式定義了一系列的特殊字符元素以執(zhí)行匹配動(dòng)作。
正則表達(dá)式基本字符
字符 | 描述 |
---|---|
text | 匹配text字符串 |
. | 匹配除換行符之外的任意一個(gè)單個(gè)字符 |
^ | 匹配一個(gè)字符串的開頭 |
$ | 匹配一個(gè)字符串的末尾 |
在正則表達(dá)式中,我們還可用匹配限定符來(lái)約束匹配的次數(shù)。
?
匹配限定符
最大匹配 | 最小匹配 | 描述 |
---|---|---|
* | * | 重復(fù)匹配前表達(dá)式零次或多次 |
+ | + | 重復(fù)匹配前表達(dá)式一次或多次 |
重復(fù)匹配前表達(dá)式零次或一次 | ||
{m} | {m} | 精確重復(fù)匹配前表達(dá)式m次 |
{m,} | {m,} | 至少重復(fù)匹配前表達(dá)式m次 |
{m,n} | {m,n} | 至少重復(fù)匹配前表達(dá)式m次,至多重復(fù)匹配前表達(dá)式n次 |
據(jù)上所述,".*"為最大匹配,能匹配源字符串所有能匹配的字符串。".* "為最小匹配,只匹配第一次出現(xiàn)的字符串。如:d.*g能匹配任意以d開頭,以g結(jié)尾的字符串,如"debug"和"debugging",甚至"dog is walking"。而d.* g只能匹配"debug",在"dog is walking"字符串中,則只匹配到"dog "。
?
在一些更復(fù)雜的匹配中,我們可用到組和運(yùn)算符。
?
組和運(yùn)算符
組 | 描述 |
---|---|
[...] | 匹配集合內(nèi)的字符,如[a-z],[1-9]或[,./;'] |
[^...] | 匹配除集合外的所有字符,相當(dāng)于取反操作 |
A|B | 匹配表達(dá)式A或B,相當(dāng)于OR操作 |
(...) | 表達(dá)式分組,每對(duì)括號(hào)為一組,如([a-b]+)([A-Z]+)([1-9]+) |
\number | 匹配在number表達(dá)式組內(nèi)的文本 |
有一組特殊的字符序列,用來(lái)匹配具體的字符類型或字符環(huán)境。如\b匹配字符邊界,food\b匹配"food"、"zoofood",而和"foodies"不匹配。
?
特殊字符序列
字符 | 描述 |
---|---|
\A | 只匹配字符串的開始 |
\b | 匹配一個(gè)單詞邊界 |
\B | 匹配一個(gè)單詞的非邊界 |
\d | 匹配任意十進(jìn)制數(shù)字字符,等價(jià)于r'[0-9]' |
\D | 匹配任意非十進(jìn)制數(shù)字字符,等價(jià)于r'[^0-9]' |
\s | 匹配任意空格字符(空格符、tab制表符、換行符、回車、換頁(yè)符、垂直線符號(hào)) |
\S | 匹配任意非空格字符 |
\w | 匹配任意字母數(shù)字字符 |
\W | 匹配任意非字母數(shù)字字符 |
\Z | 僅匹配字符串的尾部 |
\\ | 匹配反斜線字符 |
有一套聲明(assertion)對(duì)具體事件進(jìn)行聲明。
?
正則表達(dá)式聲明
聲明 | 描述 | |||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
( iLmsux) | 匹配空字符串,iLmsux字符對(duì)應(yīng)下表的正則表達(dá)式修飾符。 | |||||||||||||||||||||||||||||||||||||||||||||||
( :...) | 匹配圓括號(hào)內(nèi)定義的表達(dá)式,但不填充字符組表。 | |||||||||||||||||||||||||||||||||||||||||||||||
( P
|
匹配圓括號(hào)內(nèi)定義的表達(dá)式,但匹配的表達(dá)式還可用作name標(biāo)識(shí)的符號(hào)組。 | |||||||||||||||||||||||||||||||||||||||||||||||
( P=name) | 匹配所有與前面命名的字符組相匹配的文本。 | |||||||||||||||||||||||||||||||||||||||||||||||
( #...) | 引入注釋,忽略圓括號(hào)內(nèi)的內(nèi)容。 | |||||||||||||||||||||||||||||||||||||||||||||||
( =...) | 如果所提供的文本與下一個(gè)正則表達(dá)式元素匹配,這之間沒有多余的文本就匹配。這允許在一個(gè)表達(dá)式中進(jìn)行超前操作,而不影響正則表達(dá)式其余部分的分析。如"Martin"其后緊跟"Brown",則"Martin( =Brown)"就只與"Martin"匹配。 | |||||||||||||||||||||||||||||||||||||||||||||||
( !...) | 僅當(dāng)指定表達(dá)式與下一個(gè)正則表達(dá)式元素不匹配時(shí)匹配,是( =...)的反操作。 | |||||||||||||||||||||||||||||||||||||||||||||||
( <=...) | 如果字符串當(dāng)前位置的前綴字符串是給定文本,就匹配,整個(gè)表達(dá)式就在當(dāng)前位置終止。如( <=abc)def表達(dá)式與"abcdef"匹配。這種匹配是對(duì)前綴字符數(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對(duì)象方法
使用sub()或subn()函數(shù)可在字符串上執(zhí)行替換操作。sub()函數(shù)的基本格式如下:
?
復(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ù)返回一個(gè)元組,此元組包含替換了的文本和替換的次數(shù)。
轉(zhuǎn)義字符串用re.escape()函數(shù)。
復(fù)制代碼
代碼如下:
>>> li=['a','b'] >>> getattr(li,'append') >>> getattr(li,'append')('c')????????? #相當(dāng)于li.append('c') >>> li ['a', 'b', 'c'] >>> handler=getattr(li,'append',None) >>> handler >>> handler('cc')????????????????????? #相當(dāng)于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號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
