和其他的RE表達式一樣,但是匹配的子串可以通過group的名字 name來獲取。即 result.group('name') (提示,字符串數字都是常量,所以關鍵字都可以被視為整型(hash結果))。組名必須是合法的python標識符(即滿足python的變量定義規則),每一個組名在RE表達式中有且只能被定義一次。這樣特殊的組仍然被定義了序號,就像沒有命名的組一樣(可以通過\number的形式進行訪問),在命名的組可以通過三種方式進行引用。如果RE表達式是(?P<quote>['"]).*?(?P=quote) (匹配字符串一個或兩個引用)
回溯引用組,它匹配之前組所匹配的任意字符,並且查找匹配組名為 name的內容,不匹配會拋出異常。
import re string1 = "<span>hello world</span>" rs = re.match("(?P<span_contexts><span>(.*?)</span>)",string1) print("group0",rs.group(0)) print("group1",rs.group(1)) print("group2",rs.group(2)) print(rs.group("span_contexts"))
輸出
group0 <span>hello world</span> group1 <span>hello world</span> group2 hello world <span>hello world</span>
通過上面的例子我們可以看出在組里面可以嵌套組,組的標記序號以左括號為准,從左到右依次增加。
然后我們就匹配除了value helloworld
同時我們也可以通過print(rs.group("span_contexts"))來訪問我們匹配到的數據但是前后的數據必須是一致的。
案例二
import re string1 = "<span>hello world</span>hello world" rs = re.match("<span>(?P<span_contexts>.*?)</span>(?P=span_contexts)",string1) print(rs) print("group0",rs.group(0)) print("group1",rs.group(1)) # print("group2",rs.group(2)) print(rs.group("span_contexts"))
輸出
<re.Match object; span=(0, 35), match='<span>hello world</span>hello world'> group0 <span>hello world</span>hello world group1 hello world hello world
通過案例輸出
第一行我們可以看出前面所匹配的內容必須前后一致(不一致會報錯,在此不做演示)
也表明了我們通過(?P=span_contexts)的方式可以引用成功 類比於 \number
但是他不行成新的組,這點也類比於\number,因為(?P=span_contexts)所代表的含義是,
我這一塊內容和前面某個組的內容是一樣的,所以沒有在此創建組的意義。