Python中的多个特定的正则表达式替换

时间:2013-07-11 02:28:44

标签: python regex substitution

我想做的是在给定的文本中进行特定的替换。例如,'<'应改为'[','>'到']',等等。它类似于此处给出的解决方案: 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'的来源是从哪里来的?)

2 个答案:

答案 0 :(得分:2)

只需进行多次sub来电。

在一篇不相关的文章中,Jargon文件救援:Metasyntactic variablesfoo

答案 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 [