python如何使用正則表達(dá)式的前向、后向搜索及前向搜索否定模式詳解
前言
在許多的情況下,很多要匹配內(nèi)容是一起出現(xiàn),或者一起不出現(xiàn)的。比如《》,< >,這樣的括號,不存在使用半個的情況。因此,在正則表達(dá)式里也有一致性的判斷,要么兩個尖括號一起出現(xiàn),要么一個也不要出現(xiàn)。怎么樣來實現(xiàn)這種判斷呢?針對這種情況得引入新的正則表達(dá)式的語法:(?=pattern),這個語法它會向前搜索或者向后搜索相關(guān)內(nèi)容,如果不會出現(xiàn)就不能匹配。不過,這個匹配不會消耗任何輸入的字符,它只是查看一下。
例子如下:
#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),這個模式里看到有等于號=,它是表示一定相等,其實前向搜索模式里,還有不相等的判斷。比如你需要識別EMAIL地址:noreply@example.com,這個EMAIL地址大多數(shù)是不需要回復(fù)的,所以我們要把這個EMAIL地址識別出來,并且丟掉它。怎么辦呢?這時你就需要使用前向搜索否定模式,它的語法是這樣:(?!pattern),這里的感嘆號就是表示非,不需要的意思。比如遇到這樣的字符串:noreply@example.com,它會判斷noreply@是否相同,如果相同,就丟掉這個模式識別,不再匹配。
例子如下:
#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é)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
- 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á)式貪婪模式與非貪婪模式原理、用法實例分析
相關(guān)文章
python 使用turtule繪制遞歸圖形(螺旋、二叉樹、謝爾賓斯基三角形)
這篇文章主要介紹了python 使用turtule繪制遞歸圖形(螺旋、二叉樹、謝爾賓斯基三角形) ,需要的朋友可以參考下2019-05-05python數(shù)據(jù)分析Numpy庫的常用操作
numpy 是 Python 的一個科學(xué)計算的庫,提供了矩陣運算的功能,其一般與 Scipy、matplotlib 一起使用,這篇文章總結(jié)下python數(shù)據(jù)分析Numpy庫的常用操作,感興趣的朋友一起看看吧2022-01-01