我想做的是在给定的文本中进行特定的替换。例如,'<'应改为'[','>'到']',等等。它类似于此处给出的解决方案: How can I do multiple substitutions using regex in python?,这是
import re
def multiple_replace(dict, text):
# Create a regular expression from the dictionary keys
regex = re.compile("(%s)" % "|".join(map(re.escape, dict.keys())))
# For each match, look-up corresponding value in dictionary
return regex.sub(lambda mo: dict[mo.string[mo.start():mo.end()]], text)
现在,问题是我还想替换正则表达式匹配的模式。例如,我想用'foo'替换'fo。+',用'bar'替换'ba [rz] *'。
删除地图(代码中的re.escape有帮助,以便正则表达式实际匹配,但我接收到关键错误,因为,例如,'barzzzzzz'将匹配,我要替换的东西,但'barzzzzzz'不是字典中的键,文字字符串'ba [rz] *'是。如何修改此函数才能工作?
(在一个不相关的说明中,这些'foo'和'bar'的来源是从哪里来的?)
答案 0 :(得分:2)
只需进行多次sub
来电。
在一篇不相关的文章中,Jargon文件救援:Metasyntactic variables,foo。
答案 1 :(得分:1)
import re
def multiple_replace(dict, text):
# Create a regular expression from the dictionary keys
regex = re.compile(r'(%s)' % "|".join(dict.keys()))
return regex.sub(lambda mo: dict[
[ k for k in dict if
re.search(k, mo.string[mo.start():mo.end()])
][0]], text)
d = { r'ba[rz]*' : 'bar', '<' : '[' }
s = 'barzzzzzz <'
print multiple_replace(d, s)
给出:
bar [