Python 正則表達(dá)式的非捕獲組詳解
在 Python 正則表達(dá)式中,非捕獲組 ((?:...)
) 是一種用于分組但不保存匹配結(jié)果的結(jié)構(gòu)。它與普通的捕獲組 (...)
語法類似,但在匹配時不會創(chuàng)建編號或命名的組,常用于簡化正則表達(dá)式和提高性能。
1. 語法
(?:pattern)
?:
表示非捕獲標(biāo)記。pattern
是要匹配的正則表達(dá)式模式。
2. 示例對比
普通捕獲組 ()
import re text = "cat dog" # 捕獲組 match = re.search(r"(cat) (dog)", text) print(match.groups()) # ('cat', 'dog') print(match.group(1)) # cat print(match.group(2)) # dog
結(jié)果:groups()
返回所有捕獲的子組,group(1)
、group(2)
通過編號訪問。
非捕獲組 (?:...)
import re text = "cat dog" # 非捕獲組 match = re.search(r"(?:cat) (?:dog)", text) print(match.groups()) # () print(match.group(0)) # cat dog
結(jié)果:groups()
返回空元組,因為沒有捕獲的組。
3. 主要應(yīng)用場景
1?? 選擇(|
)時減少復(fù)雜性
import re text = "color colour" # 捕獲組 matches = re.findall(r"(col(or|our))", text) print(matches) # [('color', 'or'), ('colour', 'our')] # 非捕獲組 matches = re.findall(r"col(?:or|our)", text) print(matches) # ['color', 'colour']
優(yōu)勢:(?:or|our)
僅用于匹配,不保存子組,結(jié)果更簡潔。
2?? 提高匹配性能
import re import time text = "ab" * 100000 # 捕獲組 start = time.time() re.search(r"(ab)+", text) print("捕獲組耗時:", time.time() - start) # 非捕獲組 start = time.time() re.search(r"(?:ab)+", text) print("非捕獲組耗時:", time.time() - start)
優(yōu)勢:非捕獲組不保存匹配內(nèi)容,因此速度更快,內(nèi)存占用更少。
3?? 結(jié)構(gòu)化復(fù)雜表達(dá)式
import re text = "2024-02-19" # 捕獲組 match = re.search(r"(\d{4})-(\d{2})-(\d{2})", text) print(match.groups()) # ('2024', '02', '19') # 非捕獲組 match = re.search(r"(?:\d{4})-(?:\d{2})-(?:\d{2})", text) print(match.groups()) # ()
優(yōu)勢:結(jié)構(gòu)清晰,無需保存中間匹配結(jié)果。
4. 捕獲組 vs. 非捕獲組對比
特性 | 捕獲組 (pattern) | 非捕獲組 (?:pattern) |
---|---|---|
結(jié)果保存 | 保存,group() 可訪問 | 不保存,無 group() 結(jié)果 |
處理性能 | 慢(需要保存匹配) | 快(無需保存匹配) |
復(fù)雜性 | 復(fù)雜,需管理組索引 | 簡化,適用于邏輯分組 |
應(yīng)用場景 | 需要保存匹配時 | 僅匹配不保存時 |
5. 結(jié)論
- 需要子組內(nèi)容:使用普通捕獲組
(...)
,可通過group(n)
獲取。 - 僅控制結(jié)構(gòu):使用非捕獲組
(?:...)
,提高性能并簡化表達(dá)式。 - 性能優(yōu)化:非捕獲組減少內(nèi)存消耗,適合大型文本處理。
到此這篇關(guān)于Python 正則表達(dá)式的非捕獲組介紹的文章就介紹到這了,更多相關(guān)Python 正則表達(dá)式非捕獲組內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Python requests庫發(fā)送JSON數(shù)據(jù)的POST請求步驟
在Python這個強(qiáng)大的編程語言中,requests庫是一個廣泛使用且功能強(qiáng)大的HTTP請求庫,發(fā)送POST請求并附帶JSON數(shù)據(jù)是一個非常常見的需求,本文給大家介紹了如何用Python的requests庫發(fā)送JSON數(shù)據(jù)的POST請求,需要的朋友可以參考下2024-06-06Python數(shù)據(jù)分析之pandas讀取數(shù)據(jù)
Pandas讀取的文件主要有CSV,TXT和JSON,今天就整理了這3種文件格式的讀取和導(dǎo)出代碼,文中有非常詳細(xì)的代碼示例及介紹,需要的朋友可以參考下2021-06-06詳解windows python3.7安裝numpy問題的解決方法
這篇文章主要介紹了windows python3.7安裝numpy問題的解決方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-08-08Python任務(wù)調(diào)度利器之APScheduler詳解
所謂的任務(wù)調(diào)度是指安排任務(wù)的執(zhí)行計劃,即何時執(zhí)行,怎么執(zhí)行等。這篇文章主要介紹了Python任務(wù)調(diào)度利器之APScheduler詳解,需要的朋友可以參考下2020-04-04