Python 正則表達式的非捕獲組詳解
在 Python 正則表達式中,非捕獲組 ((?:...)) 是一種用于分組但不保存匹配結果的結構。它與普通的捕獲組 (...) 語法類似,但在匹配時不會創(chuàng)建編號或命名的組,常用于簡化正則表達式和提高性能。
1. 語法
(?:pattern)
?:表示非捕獲標記。pattern是要匹配的正則表達式模式。
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結果: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
結果:groups() 返回空元組,因為沒有捕獲的組。
3. 主要應用場景
1?? 選擇(|)時減少復雜性
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) 僅用于匹配,不保存子組,結果更簡潔。
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?? 結構化復雜表達式
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)勢:結構清晰,無需保存中間匹配結果。
4. 捕獲組 vs. 非捕獲組對比
| 特性 | 捕獲組 (pattern) | 非捕獲組 (?:pattern) |
|---|---|---|
| 結果保存 | 保存,group() 可訪問 | 不保存,無 group() 結果 |
| 處理性能 | 慢(需要保存匹配) | 快(無需保存匹配) |
| 復雜性 | 復雜,需管理組索引 | 簡化,適用于邏輯分組 |
| 應用場景 | 需要保存匹配時 | 僅匹配不保存時 |
5. 結論
- 需要子組內(nèi)容:使用普通捕獲組
(...),可通過group(n)獲取。 - 僅控制結構:使用非捕獲組
(?:...),提高性能并簡化表達式。 - 性能優(yōu)化:非捕獲組減少內(nèi)存消耗,適合大型文本處理。
到此這篇關于Python 正則表達式的非捕獲組介紹的文章就介紹到這了,更多相關Python 正則表達式非捕獲組內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python學習-List移除某個值remove和統(tǒng)計值次數(shù)count
這篇文章主要介紹了?python學習-List移除某個值remove和統(tǒng)計值次數(shù)count,文章基于python的相關內(nèi)容展開詳細介紹,需要的小伙伴可以參考一下2022-04-04
pytorch模型預測結果與ndarray互轉(zhuǎn)方式
今天小編就為大家分享一篇pytorch模型預測結果與ndarray互轉(zhuǎn)方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01
手把手教你實現(xiàn)Python連接數(shù)據(jù)庫并快速取數(shù)的工具
在數(shù)據(jù)生產(chǎn)應用部門,取數(shù)分析是一個很常見的需求,實際上業(yè)務人員需求時刻變化,最高效的方式是讓業(yè)務部門自己來取。本文就來手把手教大家搭建一個?Python?連接數(shù)據(jù)庫,快速取數(shù)工具,需要的可以參考一下2022-11-11

