python中正則表達(dá)式?: ?= ?! 的用法
正則表達(dá)式中使用的 ?:
、?=
和 ?!
是三種不同的正則表達(dá)式語法,它們分別代表非捕獲組、正向前瞻斷言和負(fù)向前瞻斷言。
1. ?: 用法
(?:...)
是一種非捕獲組(non-capturing group)的語法。它用于將一部分正則表達(dá)式括在一起,但不將該部分作為單獨的捕獲組。這意味著即使匹配了這部分表達(dá)式,也不會在結(jié)果中創(chuàng)建新的捕獲組。
正則表達(dá)式中的捕獲組(capture group)是使用圓括號 () 包圍的一部分表達(dá)式。這些捕獲組在匹配到的字符串中標(biāo)記了特定的部分,并將其保存起來以供稍后使用。
如果還不清楚什么是捕獲組,下面給一個例子就清楚了:
import re pattern = r'a(.*)test' text = 'This is a good test.' match = re.search(pattern, text) if match: print("Found word:", match.groups()) # 輸出 # Found word: (' good ',)
在這個示例中,(.*)
是一個捕獲組,用于將a
和 test
中間的字符提取出來。
知道了捕獲組,那么非捕獲組也能猜出來了。有時你可能只想將表達(dá)式括在一起,但不想保存匹配結(jié)果。在這種情況下,可以使用非捕獲組 (?: ...)
示例:
import re pattern = r'(?:abc)def' text = 'abcdef' match = re.search(pattern, text) if match: print("Match found")
在這個示例中,(?:abc)
是一個非捕獲組,它將 abc
與 def
組合在一起進(jìn)行匹配,但不會作為單獨的捕獲組。
2. ?= 用法
?=
是正向前瞻斷言(positive lookahead assertion)。它用于匹配某個子表達(dá)式后的位置,但不包含匹配到的子表達(dá)式在最終的結(jié)果中。前瞻斷言用來確保某一部分的匹配被后續(xù)某一部分的條件匹配。
示例:
import re pattern = r'abc(?=def)' text = '.x abcdef123' text2 = '.x abc1def123' match = re.search(pattern, text) if match: print("Match found:", match.group()) # 輸出 # Match found: abc match = re.search(pattern, text2) if not match: print("Match not found") # 輸出 # Match not found
在這個示例中,abc(?=def)
使用了正向前瞻斷言。它將匹配 abc
后面跟著 def
的部分。在 abcdef
中,它匹配了 abc
,因為 abc
后面是 def
。
3. ?! 用法
?!
是負(fù)向前瞻斷言(negative lookahead assertion)。它用于確保某個子表達(dá)式不匹配之后的位置,而不包含匹配到的子表達(dá)式在最終的結(jié)果中。
用法示例:
import re pattern = r'abc(?!def)' text = 'abcxyz' text2 = 'abcdef' match = re.search(pattern, text) if match: print("Match found:", match.group()) # 輸出 # Match found: abc match = re.search(pattern, text2) if not match: print("Match not found") # 輸出 # Match not found
在這個示例中,abc(?!def)
使用了負(fù)向前瞻斷言。它將匹配 abc
后面不跟著 def
的部分。在 abcxyz
中,它匹配了 abc
,因為 abc
后面沒有 def
。
4. 總結(jié)
(?:...)
是非捕獲組,不會捕獲組內(nèi)的匹配結(jié)果。?=
是正向前瞻斷言,確保匹配后的位置滿足條件。?!
是負(fù)向前瞻斷言,確保匹配后的位置不滿足條件。
到此這篇關(guān)于python中正則表達(dá)式?: ?= ?! 的用法的文章就介紹到這了,更多相關(guān)python中正則?: ?= ?! 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相
相關(guān)文章
Python通過paramiko庫實現(xiàn)遠(yuǎn)程執(zhí)行l(wèi)inux命令的方法
這篇文章主要介紹了Python通過paramiko庫實現(xiàn)遠(yuǎn)程執(zhí)行l(wèi)inux命令,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-03-03Python接口傳輸url與flask數(shù)據(jù)詳解
這篇文章主要介紹了Python通過接口傳輸url與flask數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-09-09python神經(jīng)網(wǎng)絡(luò)使用Keras構(gòu)建RNN訓(xùn)練
這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡(luò)使用Keras構(gòu)建RNN網(wǎng)絡(luò)訓(xùn)練,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>2022-05-05Python常見讀寫文件操作實例總結(jié)【文本、json、csv、pdf等】
這篇文章主要介紹了Python常見讀寫文件操作,結(jié)合實例形式總結(jié)分析了Python常見的各種文件讀寫操作,包括文本、json、csv、pdf等文件的讀寫與相關(guān)注意事項,需要的朋友可以參考下2019-04-04python繪制y關(guān)于x的線性回歸線性方程圖像實例
這篇文章主要為大家介紹了python繪制y關(guān)于x的線性回歸線性方程圖像實例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10python爬蟲用request庫處理cookie的實例講解
在本篇內(nèi)容里小編給大家整理的是一篇關(guān)于python爬蟲用request庫處理cookie的實例講解內(nèi)容,有需要的朋友們可以學(xué)習(xí)參考下。2021-02-02python 使用事件對象asyncio.Event來同步協(xié)程的操作
這篇文章主要介紹了python 使用事件對象asyncio.Event來同步協(xié)程的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05Python使用functools實現(xiàn)注解同步方法
這篇文章主要介紹了Python使用functools實現(xiàn)注解同步方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2018-02-02