python中如何正確使用正則表達(dá)式的詳細(xì)模式(Verbose mode expression)
簡單介紹
正則表達(dá)式并不是Python的一部分。正則表達(dá)式是用于處理字符串的強(qiáng)大工具,擁有自己獨(dú)特的語法以及一個獨(dú)立的處理引擎,效率上可能不如str自帶的方法,但功能十分強(qiáng)大。得益于這一點(diǎn),在提供了正則表達(dá)式的語言里,正則表達(dá)式的語法都是一樣的,區(qū)別只在于不同的編程語言實(shí)現(xiàn)支持的語法數(shù)量不同;但不用擔(dān)心,不被支持的語法通常是不常用的部分。如果已經(jīng)在其他語言里使用過正則表達(dá)式,只需要簡單看一看就可以上手了。
下圖展示了使用正則表達(dá)式進(jìn)行匹配的流程:
正則表達(dá)式的大致匹配過程是:依次拿出表達(dá)式和文本中的字符比較,如果每一個字符都能匹配,則匹配成功;一旦有匹配不成功的字符則匹配失敗。
引言
當(dāng)大家寫的正則表達(dá)式比較長,比較復(fù)雜時,發(fā)現(xiàn)經(jīng)常會寫錯,或者很難維護(hù),遇到這種情況怎么辦呢?這個不用急,聰明的設(shè)計(jì)人員早已經(jīng)想到這種情況了,提供了一種叫做詳細(xì)模式(Verbose mode expression)。當(dāng)你使用這種模式時,可以給正則表達(dá)式添加注釋,這樣在維護(hù)時就不會像看天書了,同時也可以添加額外的空格,進(jìn)行對齊排版。
緊湊模式的例子:
import re address = re.compile('[\w\d.+-]+@([\w\d.]+\.)+(com|org|edu)') candidates = [ u'first.last@example.com', u'first.last+category@gmail.com', u'valid-address@mail.example.com', u'not-valid@example.foo', ] for candidate in candidates: match = address.search(candidate) print('{:<30} {}'.format( candidate, 'Matches' if match else 'No match') )
詳細(xì)模式的修改之后:
#python 3.6 #蔡軍生 #http://blog.csdn.net/caimouse/article/details/51749579 # import re address = re.compile( ''''' [\w\d.+-]+ # username @ ([\w\d.]+\.)+ # domain name prefix (com|org|edu) # TODO: support more top-level domains ''', re.VERBOSE) candidates = [ u'first.last@example.com', u'first.last+category@gmail.com', u'valid-address@mail.example.com', u'not-valid@example.foo', ] for candidate in candidates: match = address.search(candidate) print('{:<30} {}'.format( candidate, 'Matches' if match else 'No match'), )
結(jié)果輸出如下:
first.last@example.com Matches first.last+category@gmail.com Matches valid-address@mail.example.com Matches not-valid@example.foo No match
參數(shù)解釋:X VERBOSE
該標(biāo)志通過給予你更靈活的格式以便你將正則表達(dá)式寫得更易于理解。當(dāng)該標(biāo)志被指定時,在 RE 字符串中的空白符被忽略,除非該空白符在字符類中或在反斜杠之後;這可以讓你更清晰地組織和縮進(jìn) RE。它也可以允許你將注釋寫入 RE,這些注釋會被引擎忽略;注釋用 "#"號 來標(biāo)識,不過該符號不能在字符串或反斜杠之後。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
- python中如何使用正則表達(dá)式的非貪婪模式示例
- python如何使用正則表達(dá)式的前向、后向搜索及前向搜索否定模式詳解
- 詳解Python里使用正則表達(dá)式的ASCII模式
- python中使用正則表達(dá)式的后向搜索肯定模式(推薦)
- python中正則表達(dá)式與模式匹配
- Python正則表達(dá)式教程之三:貪婪/非貪婪特性
- Python正則表達(dá)式非貪婪、多行匹配功能示例
- python正則表達(dá)式re模塊詳細(xì)介紹
- python的正則表達(dá)式re模塊的常用方法
- python利用正則表達(dá)式提取字符串
- python 正則表達(dá)式貪婪模式與非貪婪模式原理、用法實(shí)例分析
相關(guān)文章
cv2.getStructuringElement()函數(shù)及開、閉、腐蝕、膨脹原理講解
getStructuringElement()函數(shù)可用于構(gòu)造一個特定大小和形狀的結(jié)構(gòu)元素,用于圖像形態(tài)學(xué)處理,這篇文章主要介紹了cv2.getStructuringElement()函數(shù)及開、閉、腐蝕、膨脹原理講解的相關(guān)資料,需要的朋友可以參考下2022-12-12Python實(shí)現(xiàn)ping指定IP的示例
今天小編就為大家分享一篇Python實(shí)現(xiàn)ping指定IP的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06linux系統(tǒng)下pip升級報(bào)錯的解決方法
這篇文章主要給大家介紹了關(guān)于linux系統(tǒng)下pip升級報(bào)錯的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01Python語言實(shí)現(xiàn)科學(xué)計(jì)算器
這篇文章主要為大家詳細(xì)介紹了Python語言實(shí)現(xiàn)科學(xué)計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01在Python3中使用asyncio庫進(jìn)行快速數(shù)據(jù)抓取的教程
這篇文章主要介紹了在Python3中使用asyncio進(jìn)行快速數(shù)據(jù)抓取,asyncio是一個異步IO庫,運(yùn)行效率較高,需要的朋友可以參考下2015-04-04