python如何使用正則表達(dá)式的前向、后向搜索及前向搜索否定模式詳解
前言
在許多的情況下,很多要匹配內(nèi)容是一起出現(xiàn),或者一起不出現(xiàn)的。比如《》,< >,這樣的括號(hào),不存在使用半個(gè)的情況。因此,在正則表達(dá)式里也有一致性的判斷,要么兩個(gè)尖括號(hào)一起出現(xiàn),要么一個(gè)也不要出現(xiàn)。怎么樣來(lái)實(shí)現(xiàn)這種判斷呢?針對(duì)這種情況得引入新的正則表達(dá)式的語(yǔ)法:(?=pattern),這個(gè)語(yǔ)法它會(huì)向前搜索或者向后搜索相關(guān)內(nèi)容,如果不會(huì)出現(xiàn)就不能匹配。不過(guò),這個(gè)匹配不會(huì)消耗任何輸入的字符,它只是查看一下。
例子如下:
#python 3.6 #蔡軍生 #http://blog.csdn.net/caimouse/article/details/51749579 # import re address = re.compile( ''''' # A name is made up of letters, and may include "." # for title abbreviations and middle initials. ((?P<name> ([\w.,]+\s+)*[\w.,]+ ) \s+ ) # name is no longer optional # LOOKAHEAD # Email addresses are wrapped in angle brackets, but only # if both are present or neither is. (?= (<.*>$) # remainder wrapped in angle brackets | ([^<].*[^>]$) # remainder *not* wrapped in angle brackets ) <? # optional opening angle bracket # The address itself: username@domain.tld (?P<email> [\w\d.+-]+ # username @ ([\w\d.]+\.)+ # domain name prefix (com|org|edu) # limit the allowed top-level domains ) >? # optional closing angle bracket ''', re.VERBOSE) candidates = [ u'First Last <first.last@example.com>', u'No Brackets first.last@example.com', u'Open Bracket <first.last@example.com', u'Close Bracket first.last@example.com>', ] for candidate in candidates: print('Candidate:', candidate) match = address.search(candidate) if match: print(' Name :', match.groupdict()['name']) print(' Email:', match.groupdict()['email']) else: print(' No match')
結(jié)果輸出如下:
Candidate: First Last <first.last@example.com> Name : First Last Email: first.last@example.com Candidate: No Brackets first.last@example.com Name : No Brackets Email: first.last@example.com Candidate: Open Bracket <first.last@example.com No match Candidate: Close Bracket first.last@example.com> No match
python里使用正則表達(dá)式的前向搜索否定模式
上面學(xué)習(xí)前向搜索或后向搜索模式(?=pattern),這個(gè)模式里看到有等于號(hào)=,它是表示一定相等,其實(shí)前向搜索模式里,還有不相等的判斷。比如你需要識(shí)別EMAIL地址:noreply@example.com,這個(gè)EMAIL地址大多數(shù)是不需要回復(fù)的,所以我們要把這個(gè)EMAIL地址識(shí)別出來(lái),并且丟掉它。怎么辦呢?這時(shí)你就需要使用前向搜索否定模式,它的語(yǔ)法是這樣:(?!pattern),這里的感嘆號(hào)就是表示非,不需要的意思。比如遇到這樣的字符串:noreply@example.com,它會(huì)判斷noreply@是否相同,如果相同,就丟掉這個(gè)模式識(shí)別,不再匹配。
例子如下:
#python 3.6 #蔡軍生 #http://blog.csdn.net/caimouse/article/details/51749579 # import re address = re.compile( ''''' ^ # An address: username@domain.tld # Ignore noreply addresses (?!noreply@.*$) [\w\d.+-]+ # username @ ([\w\d.]+\.)+ # domain name prefix (com|org|edu) # limit the allowed top-level domains $ ''', re.VERBOSE) candidates = [ u'first.last@example.com', u'noreply@example.com', ] for candidate in candidates: print('Candidate:', candidate) match = address.search(candidate) if match: print(' Match:', candidate[match.start():match.end()]) else: print(' No match')
結(jié)果輸出如下:
Candidate: first.last@example.com Match: first.last@example.com Candidate: noreply@example.com No match
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- python中如何使用正則表達(dá)式的非貪婪模式示例
- 詳解Python里使用正則表達(dá)式的ASCII模式
- python中如何正確使用正則表達(dá)式的詳細(xì)模式(Verbose mode expression)
- python中使用正則表達(dá)式的后向搜索肯定模式(推薦)
- python中正則表達(dá)式與模式匹配
- Python正則表達(dá)式教程之三:貪婪/非貪婪特性
- Python正則表達(dá)式非貪婪、多行匹配功能示例
- python正則表達(dá)式re模塊詳細(xì)介紹
- python的正則表達(dá)式re模塊的常用方法
- python利用正則表達(dá)式提取字符串
- python 正則表達(dá)式貪婪模式與非貪婪模式原理、用法實(shí)例分析
相關(guān)文章
Python3合并兩個(gè)有序數(shù)組代碼實(shí)例
這篇文章主要介紹了Python3合并兩個(gè)有序數(shù)組代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08python 使用turtule繪制遞歸圖形(螺旋、二叉樹(shù)、謝爾賓斯基三角形)
這篇文章主要介紹了python 使用turtule繪制遞歸圖形(螺旋、二叉樹(shù)、謝爾賓斯基三角形) ,需要的朋友可以參考下2019-05-05python自定義分頁(yè)器的實(shí)現(xiàn)
這篇文章主要介紹了python自定義分頁(yè)器的實(shí)現(xiàn),通過(guò)自定義分頁(yè)器封裝展開(kāi)主題并對(duì)其實(shí)用方法簡(jiǎn)單介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-04-04Python之list對(duì)應(yīng)元素求和的方法
今天小編就為大家分享一篇Python之list對(duì)應(yīng)元素求和的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06python數(shù)據(jù)分析Numpy庫(kù)的常用操作
numpy 是 Python 的一個(gè)科學(xué)計(jì)算的庫(kù),提供了矩陣運(yùn)算的功能,其一般與 Scipy、matplotlib 一起使用,這篇文章總結(jié)下python數(shù)據(jù)分析Numpy庫(kù)的常用操作,感興趣的朋友一起看看吧2022-01-01