链接:
http://blog.csdn.net/lxcnn/article/details/4146148
1. 用小括号"()"将正则表达式括起来,可以为正则表达式分组。小括号可以嵌套(括号里面可以有括号)。每个分组的编号是按照"("出现的顺序,从左到右,从1开始进行编号的。
2. 捕获组就是把正则表达式中子表达式匹配的内容,保存到内存中以数字编号或显式命名的组里,方便后面引用。
3. 捕获组有两种形式,一种是普通捕获组,另一种是命名捕获组,通常所说的捕获组指的是普通捕获组。
4. 正则表达式使用"命名捕获"时,访问特定分组会很方便。
这样看起来,“命名捕获”实际上是“普通捕获”的语法糖。当然命名捕获也支持嵌套了。
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)
完。