使用位元組正則運算式可以正常作業,如下所示:
In [48]: regexp_1 = re.compile(b"\xab.{3}")
In [49]: regexp_1.fullmatch(b"\xab\x66\x77\x88")
Out[49]: <re.Match object; span=(0, 4), match=b'\xabfw\x88'> # <----- good !
當我嘗試根據這篇文章格式化位元組序列時,我失敗了:
In [50]: byte = b"\xab"
In [51]: regexp_2 = re.compile(f"{byte}.{3}".encode())
In [52]: regexp_2.fullmatch(b"\xab\x66\x77\x88")
In [53]: # nothing found ... why ?
uj5u.com熱心網友回復:
發生這種情況是因為 f-string 將給定物件轉換為字串,并且當位元組物件轉換為字串時,它看起來不像您期望的那樣:
>>> str(byte)
"b'\\xab'"
因此,當您像以前那樣將其通過 f-string 時,它會變得很丑,并且在再次編碼時會保持這種狀態!
>>> f"{byte}.{3}"
"b'\\xab'.3"
>>> f"{byte}.{3}".encode()
b"b'\\xab'.3"
更不用說 {3} 被決議為 3. 以防止您可以使用雙括號 ( {{3}}) 代替,但這不是這個問題的重點。
我建議您改為連接字串。
regexp = re.compile(byte b'.{3}')
# <re.Match object; span=(0, 4), match=b'\xabfw\x88'>
regexp.fullmatch(b"\xab\x66\x77\x88")
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/419691.html
標籤:
上一篇:如何使用正則運算式去除Python中帶有特殊字符的單詞?
下一篇:括號和逗號的正則運算式組合
