Python中的正規表示式高階用法

巴扎黑
發布: 2017-03-30 14:15:22
原創
1843 人瀏覽過

對Python來說,學習正規就要學習模組re的使用方法。本文將展示一些大家都應該掌握的高階技巧。

編譯正規物件

re.compile函數根據一個模式字串和可選的標誌參數產生一個正規表示式物件。該物件擁有一系列方法用於正規表示式匹配和替換。用法上略有區別,舉個例子, 匹配一個字串可用如下方式:

如果使用compile,將變成:

為什麼要這麼用呢?其實就是為了提高正規匹配的速度,重複利用正規表示式物件。讓我們比較一下2種方式的效率:

Python中的正規表示式高階用法

可以看到第二種方式快很多。在實際的工作中你會發現越多的使用編譯好的正規表示式對象,效果就越好。

分組(group)

你可能已經看過對符合的內容進行分組的用法了:

Python中的正規表示式高階用法

#透過為要匹配的物件加上括號,就可以精確的對應符合的結果了。我們也可以進行嵌套的分組:

Python中的正規表示式高階用法

分組可以滿足需求,但是有時可讀性很差,那可以對分組進行命名:

Python中的正規表示式高階用法

#現在可讀性就非常高了。

字串符合

學過sed的同學可能看過以下替換用法:

這個\1表示前面正規相符的結果。上面的sed也就是為匹配到的結果加上中括號。

在re模組中也存在這樣的用法:

Python中的正規表示式高階用法

#用命名分組也是可以的:

Python中的正規表示式高階用法

附近匹配(Look around)

re模組也支援附近匹配,看看例子就懂了:

Python中的正規表示式高階用法
##正規匹配的時候使用函數

之前我們看到的大部分內容都是匹配的是一個表達式,但是有時需求要複雜得多,尤其是在替換的時候。

舉個例子,透過Slack的API能取得聊天記錄,例如下面這句話:

其中<@U1EAT8MG9>和<@U0K1MF23Z>是2個真實的用戶,但是被Slack封裝了,需要透過其他介面取得這個對應關係,

其結果類似這樣:

在解析對應關係之後,還希望吧尖括號也去掉,替換後的結果是「@xiaoming, @laolin 嗯確實是這樣的」

用正規怎麼實現呢?


Python中的正規表示式高階用法
所以pattern當然也可以是函數

以上是Python中的正規表示式高階用法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!