1. 用小括號"()"將正則表達式括起來,可以爲正則表達式分組。小括號可以嵌套(括號裏面可以有括號)。每個分組的編號是按照"("出現的順序,從左到右,從1開始進行編號的。
2. 捕獲組就是把正則表達式中子表達式匹配的內容,保存到內存中以數字編號或顯式命名的組裏,方便後面引用。
3. 捕獲組有兩種形式,一種是普通捕獲組,另一種是命名捕獲組,通常所說的捕獲組指的是普通捕獲組。
4. 正則表達式使用"命名捕獲"時,訪問特定分組會很方便。
這樣看起來,“命名捕獲”實際上是“普通捕獲”的語法糖。當然命名捕獲也支持嵌套了。
很顯然,一個正則表達式中,命名捕獲組的所有組名不可以重複。
下面是一個例子,這個例子很簡單用str.split()就可以解決,本例只是用來演示一下:
if __name__ == "__main__":
import re
content = "p15:00~09:15"
pHHMM1 = r"(?P<HHMM1>(?P<pre1>[pP]{0,1})(?P<HH1>\d{2}):(?P<MM1>\d{2}))"
pHHMM2 = r"(?P<HHMM2>(?P<pre2>[pP]{0,1})(?P<HH2>\d{2}):(?P<MM2>\d{2}))"
pattern = "^" + pHHMM1 + "~" + pHHMM2 + "$"
sreMatch = re.match(pattern, content)
if not sreMatch:
print("匹配失敗,即將退出...")
exit(1)
grpDict = sreMatch.groupdict()
_l = ["HHMM1", "pre1", "HH1", "MM1", "HHMM2", "pre2", "HH2", "MM2"]
for name in _l:
print(name, "->", grpDict[name])
exit(0)
完。