我需要使用Python开发的程序的帮助。

假设我想将"steak"单词的每个实例替换为"ghost"(随它一起去...),但是我也想同时将"ghost"单词的每个实例替换为"steak"。以下代码不起作用:

 s="The scary ghost ordered an expensive steak"
 print s
 s=s.replace("steak","ghost")
 s=s.replace("ghost","steak")
 print s

它打印:The scary steak ordered an expensive steak
我想要得到的是The scary steak ordered an expensive ghost

最佳答案

我可能会在这里使用正则表达式:

>>> import re
>>> s = "The scary ghost ordered an expensive steak"
>>> sub_dict = {'ghost':'steak','steak':'ghost'}
>>> regex = '|'.join(sub_dict)
>>> re.sub(regex, lambda m: sub_dict[m.group()], s)
'The scary steak ordered an expensive ghost'

或者,作为可以复制/粘贴的功能:
import re
def word_replace(replace_dict,s):
    regex = '|'.join(replace_dict)
    return re.sub(regex, lambda m: replace_dict[m.group()], s)

基本上,我创建了一个要映射为其他单词(sub_dict)的单词映射。我可以从该映射创建一个正则表达式。在这种情况下,正则表达式为"steak|ghost"(或"ghost|steak"-顺序无关紧要),而regex引擎完成其余工作,以查找不重叠的序列并相应地替换它们。

一些可能有用的修改
  • regex = '|'.join(map(re.escape,replace_dict))-允许正则表达式中具有特殊的正则表达式语法(例如括号)。这样可以转义特殊字符以使正则表达式与文字文本匹配。
  • regex = '|'.join(r'\b{0}\b'.format(x) for x in replace_dict)-如果我们的一个单词是另一个单词的子字符串,请确保我们不匹配。换句话说,将he更改为she,但不将the更改为tshe
  • 09-26 02:11