国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Python基礎(9)--正則表達式

2019-11-14 17:34:14
字體:
來源:轉載
供稿:網友

正則表達式是一個很有用的工具,可處理復雜的字符匹配和替換工作。在Python中內置了一個re模塊以支持正則表達式。

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

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

  • 替換就是在一個字符串中查找并替換匹配一特殊表達式的字符串。

本文地址:http://m.survivalescaperooms.com/archimedes/p/python-regular-exPRession.html,轉載請注明源地址。

1.基本元素

正則表達式定義了一系列的特殊字符元素以執行匹配動作。

正則表達式基本字符

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

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

匹配限定符

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

據上所述,".*"為最大匹配,能匹配源字符串所有能匹配的字符串。".* "為最小匹配,只匹配第一次出現的字符串。如:d.*g能匹配任意以d開頭,以g結尾的字符串,如"debug"和"debugging",甚至"dog is walking"。而d.* g只能匹配"debug",在"dog is walking"字符串中,則只匹配到"dog "。

在一些更復雜的匹配中,我們可用到組和運算符。

組和運算符

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

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

特殊字符序列

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

有一套聲明(assertion)對具體事件進行聲明。

正則表達式聲明

聲明描述
( iLmsux)匹配空字符串,iLmsux字符對應下表的正則表達式修飾符。
( :...)匹配圓括號內定義的表達式,但不填充字符組表。
( P<name>)匹配圓括號內定義的表達式,但匹配的表達式還可用作name標識的符號組。
( P=name)匹配所有與前面命名的字符組相匹配的文本。
( #...)引入注釋,忽略圓括號內的內容。
( =...)如果所提供的文本與下一個正則表達式元素匹配,這之間沒有多余的文本就匹配。這允許在一個表達式中進行超前操作,而不影響正則表達式其余部分的分析。如"Martin"其后緊跟"Brown",則"Martin( =Brown)"就只與"Martin"匹配。
( !...)僅當指定表達式與下一個正則表達式元素不匹配時匹配,是( =...)的反操作。
( <=...)如果字符串當前位置的前綴字符串是給定文本,就匹配,整個表達式就在當前位置終止。如( <=abc)def表達式與"abcdef"匹配。這種匹配是對前綴字符數量的精確匹配。
( <!...)如果字符串當前位置的前綴字符串不是給定的正文,就匹配,是( <=...)的反操作。

正則表達式還支持一些處理標志,它會影響正則式的執行方法。

處理標志

標志描述
I或IGNORECASE忽略表達式的大小寫來匹配文本。

2.操作

通過re模塊,我們就可在python中利用正則式對字符串進行搜索、抽取和替換操作。如:re.search()函數能執行一個基本的搜索操作,它能返回一個MatchObject對象。re.findall()函數能返回匹配列表。

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

使用sub()或subn()函數可在字符串上執行替換操作。sub()函數的基本格式如下:

sub(pattern,replace,string[,count])

示例

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

replace參數可接受函數。要獲得替換的次數,可使用subn()函數。subn()函數返回一個元組,此元組包含替換了的文本和替換的次數。

如果需用同一個正則式進行多次匹配操作,我們可把正則式編譯成內部語言,提高處理速度。編譯正則式用compile()函數來實現。compile()函數的基本格式如下:

compile(str[,flags])

str表示需編譯的正則式串,flags是修飾標志符。正則式被編譯后生成一個對象,該對象有多種方法和屬性。

正則式對象方法/屬性

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

轉義字符串用re.escape()函數。

通過getattr獲取對象引用

>>> li=['a','b']>>> getattr(li,'append')>>> getattr(li,'append')('c')          #相當于li.append('c')>>> li['a', 'b', 'c']>>> handler=getattr(li,'append',None)>>> handler<built-in method append of list object at 0xb7d4a52c>>>> handler('cc')                      #相當于li.append('cc')>>> li['a','b','c','cc']>>>result = handler('bb')>>>li['a','b','c','cc','bb']>>>print resultNone

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 崇义县| 沂南县| 遂平县| 凌云县| 易门县| 南江县| 苏州市| 白银市| 西和县| 聊城市| 库尔勒市| 宝应县| 简阳市| 都江堰市| 庄河市| 卫辉市| 明溪县| 茶陵县| 峨眉山市| 宝兴县| 保山市| 修文县| 辉南县| 锡林郭勒盟| 麻阳| 海口市| 股票| 中山市| 永康市| 凌云县| 乐都县| 厦门市| 手游| 岳池县| 子长县| 中超| 电白县| 宁乡县| 东光县| 府谷县| 衡山县|