簡體   English   中英

re.sub repl函數返回\\ 1不會替換組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM