[英]re.sub repl function returning \1 does not replace the group
我正在嘗試為Python中的regex子操作編寫通用的替換函數(在2和3中都嘗試),用戶可以在其中提供regex模式和匹配項的替換。 這可能只是使用匹配項中的組進行替換的簡單字符串替換。
最后,我從用戶那里獲得了以下形式的字典:
regex_dict = {pattern:replacement}
當我嘗試通過此命令替換所有出現的模式時,替換適用於替換組號(例如\\ 1),並調用以下操作:
re.sub(pattern, regex_dict[pattern], text)
這按預期工作,但是當找到匹配項時,我需要做其他工作。 基本上,我嘗試實現的目標如下:
replace_function(matchobj):
result = regex_dict[matchobj.re]
##
## Do some other things
##
return result
re.sub(pattern, replace_function, text)
我看到這適用於常規替換,但是使用該功能時re.sub不會使用組信息來獲取匹配項。
我還嘗試將\\ 1模式轉換為\\ g <1>,希望re.sub能夠理解它,但無濟於事。
我缺少重要的東西嗎?
提前致謝!
附加說明:我使用字符串(以字節為單位)編譯模式,替換內容也以字節為單位。 我的模式中有非拉丁字符,但我讀取的所有內容均以字節為單位,包括將在正則表達式替換上進行操作的文本。
編輯只是為了澄清,我不預先知道用戶將提供什么樣的替換。 它可以是普通字符串和組的某種組合,也可以只是字符串替換。
replace_function(matchobj):
repl = regex_dict[matchobj.re]
##
## Do some other things
##
return matchobj.expand(repl)
re.sub(pattern, replace_function, text)
我懷疑您是在.expand
之后,如果您有一個已編譯的regex對象(例如),則可以提供一個替換字符串,例如:
import re
text = 'abc'
# This would be your key in the dict
rx = re.compile('a(\w)c')
# This would be the value for the key (the replacement string, eg: `\1\1\1`)
res = rx.match(text).expand(r'\1\1\1')
# bbb
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.