Python 正則表達式的高級用法
對于Python來說,學習正則就要學習模塊re的使用方法。本文將展示一些大家都應該掌握的高級技巧。
編譯正則對象
re.compile函數(shù)根據(jù)一個模式字符串和可選的標志參數(shù)生成一個正則表達式對象。該對象擁有一系列方法用于正則表達式匹配和替換。用法上略有區(qū)別,舉個例子, 匹配一個字符串可用如下方式:
如果使用compile,將變成:
為什么要這么用呢?其實就是為了提高正則匹配的速度,重復利用正則表達式對象。我們對比一下2種方式的效率:
可以看到第二種方式要快很多。在實際的工作中你會發(fā)現(xiàn)越多的使用編譯好的正則表達式對象,效果就越好。
分組(group)
你可能已經(jīng)見過對匹配的內(nèi)容進行分組的用法了:
通過對要匹配的對象添加括號,就可以精確的對應符合的結(jié)果了。我們還可以進行嵌套的分組:
分組可以滿足需求,但是有時候可讀性很差,那可以對分組進行命名:
現(xiàn)在可讀性就非常高了。
字符串匹配
學過sed的同學可能見過如下替換用法:
這個\1表示前面正則匹配到的結(jié)果。上面的sed也就是給匹配到的結(jié)果加上中括號。
在re模塊中也存在這樣的用法:
用命名分組也是可以的:
附近匹配(Look around)
re模塊也支持附近匹配,看看例子就懂了:
正則匹配的時候使用函數(shù)
之前我們看到的大部分內(nèi)容都是匹配的是一個表達式,但是有時候需求要復雜得多,尤其是在替換的時候。
舉個例子,通過Slack的API能獲取聊天記錄,比如下面這句:
其中<@U1EAT8MG9>和<@U0K1MF23Z>是2個真實的用戶,但是被Slack封裝了,需要通過其他接口獲取這個對應關(guān)系,
其結(jié)果類似這樣:
在解析對應關(guān)系之后,還希望吧尖括號也去掉,替換后的結(jié)果是「@xiaoming, @laolin 嗯 確實是這樣的 」
用正則怎么實現(xiàn)呢?
所以pattern當然也可以是一個函數(shù)
相關(guān)文章
python使用pycharm環(huán)境調(diào)用opencv庫
這篇文章主要介紹了python使用pycharm環(huán)境調(diào)用opencv庫,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-02-02Django發(fā)送郵件和itsdangerous模塊的配合使用解析
這篇文章主要介紹了Django發(fā)送郵件和itsdangerous模塊的配合使用解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-08-08django之用戶、用戶組及權(quán)限設(shè)置方式
這篇文章主要介紹了django之用戶、用戶組及權(quán)限設(shè)置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05DenseNet121模型實現(xiàn)26個英文字母識別任務(wù)
這篇文章主要為大家介紹了DenseNet121模型實現(xiàn)26個英文字母識別任務(wù)的實例過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-04-04Python采集貓眼兩萬條數(shù)據(jù) 對《無名之輩》影評進行分析
這篇文章主要給大家介紹了關(guān)于利用Python榮國采集兩萬條貓眼數(shù)據(jù),對《無名之輩》影評進行分析的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧2018-12-12