我正在尝试为Python中的正则表达式子操作编写泛型替换函数(同时尝试2和3)用户可以提供正则表达式模式并替换匹配。这可能只是一个简单的字符串替换,用于替换匹配中的组。
最后,我从用户那里获得了这种形式的字典:
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)
答案 0 :(得分:0)
我怀疑你在.expand
之后,如果你有一个编译的正则表达式对象(例如),你可以提供一个字符串来考虑替换,例如:< / p>
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