python學習之re (?P...)通過關鍵字獲取組以及( P=name)


和其他的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)所代表的含義是,

我這一塊內容和前面某個組的內容是一樣的,所以沒有在此創建組的意義。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM