首頁  >  文章  >  後端開發  >  為什麼 `re.sub(r\'(foo)\', r\'\\1123\', \'foobar\')` 在 Python 正規表示式中不會產生 \"foo123bar\" ?

為什麼 `re.sub(r\'(foo)\', r\'\\1123\', \'foobar\')` 在 Python 正規表示式中不會產生 \"foo123bar\" ?

DDD
DDD原創
2024-11-03 22:19:30725瀏覽

Why does `re.sub(r'(foo)', r'23', 'foobar')` not produce

Python 正規表示式混亂:使用群組編號反向引用進行替換

當嘗試使用正規表示式將「foobar」替換為「foo123bar」時,你可能會遇到意想不到的結果。像 re.sub(r'(foo)', r'1123', 'foobar') 這樣的替換無法產生所需的輸出,而是傳回「J3bar」。

要理解這個問題,重要的是請注意組號反向引用和文字數字之間的區別。在這種情況下,1123 將「1123」視為文字字串,而不是對第一個捕獲組的引用。因此,替換無法如預期進行。

要實現正確的替換,您應該使用語法 g,其中「number」指的是群組編號。例如:

re.sub(r'(foo)', r'\g<1>123', 'foobar')

在這種情況下,g捕獲與第一組匹配的子字串,即輸入中的字串「foo」。透過使用適當的組號反向引用,可以正確執行替換,從而得到輸出「foo123bar」。

Python 文件中對此行為進行了解釋,該文件描述了 g 的使用。指定一個命名組。對於組號,g可以是組號。可以用來明確引用相應的群組,避免字面數字造成的潛在混亂。

以上是為什麼 `re.sub(r\'(foo)\', r\'\\1123\', \'foobar\')` 在 Python 正規表示式中不會產生 \"foo123bar\" ?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn