最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python入門篇之正則表達(dá)式

 更新時(shí)間:2014年10月20日 10:16:00   投稿:hebedich  
正則表達(dá)式是一個(gè)很有用的工具,可處理復(fù)雜的字符匹配和替換工作。在Python中內(nèi)置了一個(gè)re模塊以支持正則表達(dá)式。本文我們就來詳細(xì)探討下Python中正則表達(dá)式。

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

匹配就是在一個(gè)文本字符串中搜索匹配一特殊表達(dá)式;

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

正則表達(dá)式基本字符

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

在正則表達(dá)式中,我們還可用匹配限定符來約束匹配的次數(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á)式分組,每對括號為一組,如([a-b]+)([A-Z]+)([1-9]+)
\number 匹配在number表達(dá)式組內(nè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制表符、換行符、回車、換頁符、垂直線符號)
\S 匹配任意非空格字符
\w 匹配任意字母數(shù)字字符
\W 匹配任意非字母數(shù)字字符
\Z 僅匹配字符串的尾部
\\ 匹配反斜線字符

有一套聲明(assertion)對具體事件進(jìn)行聲明。
 
正則表達(dá)式聲明

聲明 描述
( iLmsux) 匹配空字符串,iLmsux字符對應(yīng)下表的正則表達(dá)式修飾符。
( :...) 匹配圓括號內(nèi)定義的表達(dá)式,但不填充字符組表。
( P<name>) 匹配圓括號內(nèi)定義的表達(dá)式,但匹配的表達(dá)式還可用作name標(biāo)識(shí)的符號組。
( P=name) 匹配所有與前面命名的字符組相匹配的文本。
( #...) 引入注釋,忽略圓括號內(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"匹配。這種匹配是對前綴字符數(shù)量的精確匹配。
( <!...) 如果字符串當(dāng)前位置的前綴字符串不是給定的正文,就匹配,是( <=...)的反操作。

正則表達(dá)式還支持一些處理標(biāo)志,它會(huì)影響正則式的執(zhí)行方法。
 
處理標(biāo)志

標(biāo)志 描述
I或IGNORECASE 忽略表達(dá)式的大小寫來匹配文本。

2.操作
 

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

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

>>> 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,...]) 返回匹配的文本,是個(gè)元組。此文本是與給定group或由其索引數(shù)字定義的組匹配的文本,如果沒有組定組名,則返回所有匹配項(xiàng)。
m.groups([default]) 返回一個(gè)元組,該元組包含模式中與所有組匹配的文本。如果給出default參數(shù),default參數(shù)值就是與給定表達(dá)式不匹配的組的返回值。default參數(shù)的默認(rèn)取值為None。
m.groupdict([default]) 返回一個(gè)字典,該字典包含匹配的所有子組。如果給出default參數(shù),其值就是那些不匹配組的返回值。default參數(shù)的默認(rèn)取值為None。
m.start([group]) 返回指定group的開始位置,或返回全部匹配的開始位置。
m.end([group]) 返回指定group的結(jié)束位置,或返回全部匹配的結(jié)束位置。
m.span([group]) 返回兩元素組,此元組等價(jià)于關(guān)于一給定組或一個(gè)完整匹配表達(dá)式的(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)建這個(gè)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ù)返回一個(gè)元組,此元組包含替換了的文本和替換的次數(shù)。
 
如果需用同一個(gè)正則式進(jìn)行多次匹配操作,我們可把正則式編譯成內(nèi)部語言,提高處理速度。編譯正則式用compile()函數(shù)來實(shí)現(xiàn)。compile()函數(shù)的基本格式如下:
 compile(str[,flags])
 
str表示需編譯的正則式串,flags是修飾標(biāo)志符。正則式被編譯后生成一個(gè)對象,該對象有多種方法和屬性。
 
正則式對象方法/屬性

方法/屬性 描述
r.search(string[,pos[,endpos]]) 同search()函數(shù),但此函數(shù)允許指定搜索的起點(diǎn)和終點(diǎn)
r.match(string[,pos[,endpos]]) 同match()函數(shù),但此函數(shù)允許指定搜索的起點(diǎn)和終點(diǎn)
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)建對象時(shí)定義的標(biāo)志
r.groupindex 將r'( Pid)'定義的符號組名字映射為組序號的字典
r.pattern 在創(chuàng)建對象時(shí)使用的模式

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

復(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
<built-in method append of list object at 0xb7d4a52c>
>>> handler('cc')                      #相當(dāng)于li.append('cc')
>>> li
['a','b','c','cc']
>>>result = handler('bb')
>>>li
['a','b','c','cc','bb']
>>>print result
None

相關(guān)文章

  • python?pandas處理excel表格數(shù)據(jù)的常用方法總結(jié)

    python?pandas處理excel表格數(shù)據(jù)的常用方法總結(jié)

    在計(jì)算機(jī)編程中,pandas是Python編程語言的用于數(shù)據(jù)操縱和分析的軟件庫,下面這篇文章主要給大家介紹了關(guān)于python?pandas處理excel表格數(shù)據(jù)的常用方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • pytorch使用nn.Moudle實(shí)現(xiàn)邏輯回歸

    pytorch使用nn.Moudle實(shí)現(xiàn)邏輯回歸

    這篇文章主要為大家詳細(xì)介紹了pytorch使用nn.Moudle實(shí)現(xiàn)邏輯回歸,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • Python入門教程3. 列表基本操作【定義、運(yùn)算、常用函數(shù)】

    Python入門教程3. 列表基本操作【定義、運(yùn)算、常用函數(shù)】

    這篇文章主要介紹了Python列表基本操作,結(jié)合實(shí)例形式總結(jié)分析了Python針對列表的基本定義、判斷、運(yùn)算及各種常用函數(shù)與相關(guān)使用技巧,需要的朋友可以參考下
    2018-10-10
  • Python 錯(cuò)誤和異常代碼詳解

    Python 錯(cuò)誤和異常代碼詳解

    這篇文章主要介紹了Python 錯(cuò)誤和異常代碼詳解,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • macOS M1(AppleSilicon) 安裝TensorFlow環(huán)境

    macOS M1(AppleSilicon) 安裝TensorFlow環(huán)境

    蘋果為M1芯片的Mac提供了TensorFlow的支持,本文主要介紹了如何給使用M1芯片的macOS安裝TensorFlow的環(huán)境,感興趣的可以了解一下
    2021-08-08
  • pytest自定義命令行參數(shù)的實(shí)現(xiàn)

    pytest自定義命令行參數(shù)的實(shí)現(xiàn)

    本文主要介紹了在使用pytest運(yùn)行測試用例時(shí),通過傳遞自定義命令行參數(shù)來啟動(dòng)mitmdump進(jìn)程進(jìn)行抓包,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-12-12
  • Python實(shí)現(xiàn)哲學(xué)家就餐問題實(shí)例代碼

    Python實(shí)現(xiàn)哲學(xué)家就餐問題實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于Python實(shí)現(xiàn)哲學(xué)家就餐問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 深度解讀Python dataclasses.asdict()的用法

    深度解讀Python dataclasses.asdict()的用法

    asdict()是Python dataclasses 模塊中用于將數(shù)據(jù)類實(shí)例轉(zhuǎn)換為字典的核心函數(shù),它具有遞歸轉(zhuǎn)換復(fù)雜嵌套數(shù)據(jù)結(jié)構(gòu)、保留集合類型以及類型感知能力,本文就來詳細(xì)的介紹一下用法,感興趣的可以了解一下
    2026-05-05
  • 基于flask實(shí)現(xiàn)五子棋小游戲

    基于flask實(shí)現(xiàn)五子棋小游戲

    這篇文章主要為大家詳細(xì)介紹了基于flask實(shí)現(xiàn)五子棋小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • Python基于FastAPI和WebSocket實(shí)現(xiàn)實(shí)時(shí)聊天應(yīng)用

    Python基于FastAPI和WebSocket實(shí)現(xiàn)實(shí)時(shí)聊天應(yīng)用

    這篇文章主要為大家詳細(xì)介紹了Python如何基于FastAPI和WebSocket實(shí)現(xiàn)實(shí)時(shí)聊天應(yīng)用,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-04-04

最新評論

云林县| 巫山县| 马鞍山市| 临夏县| 格尔木市| 和硕县| 德安县| 宁化县| 英超| 永清县| 微山县| 神农架林区| 彭阳县| 屏东市| 洛隆县| 汉中市| 武威市| 永昌县| 阿坝| 霸州市| 伊金霍洛旗| 唐海县| 塘沽区| 延庆县| 东辽县| 城口县| 新宁县| 吉首市| 山东省| 昭觉县| 电白县| 郎溪县| 寿光市| 闸北区| 时尚| 施秉县| 安阳市| 柳河县| 永兴县| 仙居县| 英吉沙县|