如何避免暴露菜鳥不會用的 Python 正則表達式捕獲組

How_Guru_to_use_Capturing_Groups_in_Python_Regular_Expressions.jpg

釋放 Python 正則表達式中命名捕獲組的威力

介紹

正則表達式是 Python 中模式匹配和文本處理的強大工具宴咧。正則表達式鮮為人知的功能之一被稱為捕獲組即碗,它允許我們?yōu)橐崛〉哪J降奶囟ú糠置T诒静┛椭腥蓝悖覀儗⑻剿髅东@組泼诱,并了解它們如何簡化和增強我們的正則表達式代碼苛谷。那么,讓我們深入了解一下吧成箫!

什么是命名捕獲組展箱?

正則表達式中的捕獲組是括在括號中的模式的一部分()。它們允許我們提取匹配字符串的特定部分蹬昌。另一方面混驰,命名捕獲組提供了一項附加功能:為這些組分配名稱的能力。

命名捕獲組的語法為(?P<name>pattern),其中name是我們要為該組指定的名稱栖榨,pattern是我們要匹配的正則表達式模式昆汹。

傳統(tǒng)方法:捕獲沒有名字的群體

讓我們首先看看如何使用沒有命名組的傳統(tǒng)捕獲組來提取信息。

import re

# Example input string
input_string = "Date: 2023-07-31"

# Define the regex pattern with capturing groups
pattern = r"Date: (\d{4}-\d{2}-\d{2})"

# Find the match using the regex pattern
match = re.search(pattern, input_string)

if match:
    # Extract the date using the captured group
    date = match.group(1)
    print(f"Date: {date}")

輸出

Date: 2023-07-31

使用命名捕獲組進行簡化

現(xiàn)在婴栽,讓我們看看命名捕獲組如何簡化我們的代碼并使其更具可讀性满粗。

import re

# Example input string
input_string = "Date: 2023-07-31"

# Define the regex pattern with named capturing group
pattern = r"Date: (?P<date>\d{4}-\d{2}-\d{2})"

# Find the match using the regex pattern
match = re.search(pattern, input_string)

if match:
# Extract the date using the named capturing group
date = match.group("date")
print(f"Date: {date}")

輸出:

Date: 2023-07-31

正如您所看到的,使用命名捕獲組愚争,我們可以使用分配給該組的名稱直接訪問捕獲的值映皆,從而使我們的代碼更加明確和自記錄。

更好的代碼組織

命名捕獲組的另一個優(yōu)點是改進了代碼組織轰枝。在處理復雜模式時捅彻,對組進行命名可以使我們的代碼更易于維護且更易于理解。

在復雜場景中使用命名捕獲組永久鏈接

在處理涉及多個捕獲組的復雜場景時狸膏,命名捕獲組變得更加有用沟饥。考慮一個我們想要提取有關錯誤日志的信息的示例湾戳。

import re

# Example error log
error_log = "[ERROR]   MyControllerTest.test:62->testList:92"

# Define the regex pattern with named capturing groups
pattern = r"\[ERROR\]\s+(?P<java_name>\w+\.\w+)\.test:(?P<line_number>\d+)->(?P<test_name>\w+):(?P<test_line>\d+)"

# Find the match using the regex pattern
match = re.match(pattern, error_log)

if match:
# Extract relevant information using the named capturing groups
java_name = match.group("java_name")
line_number = match.group("line_number")
test_name = match.group("test_name")
test_line = match.group("test_line")

    print(f"Java Name: {java_name}")
    print(f"Line Number: {line_number}")
    print(f"Test Name: {test_name}")
    print(f"Test Line: {test_line}")

輸出:

Java Name: MyControllerTest
Line Number: 62
Test Name: testList
Test Line: 92

通過命名捕獲組贤旷,代碼變得更具表現(xiàn)力并且更易于維護,尤其是在模式中使用多個組時砾脑。

結論

Python 正則表達式中的命名捕獲組是一項強大的功能幼驶,可以顯著增強代碼的可讀性和可維護性。通過為您想要捕獲的模式部分提供有意義的名稱韧衣,您可以使代碼更加自記錄并且更易于理解盅藻。無論您處理的是簡單還是復雜的場景,命名捕獲組都提供了一種干凈而有效的方法來從文本中提取相關信息畅铭。

那么氏淑,為什么不在您的下一個正則表達式項目中嘗試命名捕獲組并釋放其全部潛力呢?

–HTH–

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末硕噩,一起剝皮案震驚了整個濱河市假残,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌炉擅,老刑警劉巖辉懒,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異谍失,居然都是意外死亡眶俩,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門快鱼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來颠印,“玉大人纲岭,你說我怎么就攤上這事∷砸牵” “怎么了荒勇?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長闻坚。 經(jīng)常有香客問我沽翔,道長,這世上最難降的妖魔是什么窿凤? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任仅偎,我火速辦了婚禮,結果婚禮上雳殊,老公的妹妹穿的比我還像新娘橘沥。我一直安慰自己,他們只是感情好夯秃,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布座咆。 她就那樣靜靜地躺著,像睡著了一般仓洼。 火紅的嫁衣襯著肌膚如雪介陶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天色建,我揣著相機與錄音哺呜,去河邊找鬼。 笑死箕戳,一個胖子當著我的面吹牛某残,可吹牛的內容都是我干的。 我是一名探鬼主播陵吸,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼玻墅,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了壮虫?” 一聲冷哼從身側響起椭豫,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎旨指,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體喳整,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡谆构,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了框都。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片搬素。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出熬尺,到底是詐尸還是另有隱情摸屠,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布粱哼,位于F島的核電站季二,受9級特大地震影響,放射性物質發(fā)生泄漏揭措。R本人自食惡果不足惜胯舷,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望绊含。 院中可真熱鬧桑嘶,春花似錦、人聲如沸躬充。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽充甚。三九已至以政,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間津坑,已是汗流浹背妙蔗。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留疆瑰,地道東北人眉反。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像穆役,于是被迫代替她去往敵國和親寸五。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內容

  • 分組 分組的引入對于要重復單個字符耿币,非常簡單梳杏,直接在字符后賣弄加上限定符即可,例如 a+ 表示匹配1個或一個以上的...
    一名程序猿閱讀 2,178評論 0 4
  • 參考資料 《JS正則表達式的分組匹配》《正則表達式之捕獲組/非捕獲組介紹》《正則表達式中(?:pattern)淹接、(...
    囍馮總囍閱讀 373評論 0 0
  • 1十性、概述 1.1什么是捕獲組 捕獲組就是把正則表達式中子表達式匹配的內容,保存到內存中以數(shù)字編號或顯式命名的組里塑悼,...
    沖鋒丘丘人閱讀 1,585評論 0 0
  • 捕獲組 使用小括號指定一個子表達式后劲适,匹配這個子表達式的文本(也就是此分組捕獲的內容)可以在表達式或其它程序中作進...
    Cindy小隱閱讀 8,618評論 1 7
  • 捕獲組與反向引用 在正則表達式中,圓括號的一大作用是進行模式分組厢蒜,而其還有另一個非常重要的作用霞势,即定義捕獲組烹植。捕獲...
    櫻雨樓閱讀 1,681評論 0 0