我想替换包含以下单词“$%word $%”的字符串部分 我想用字典的值替换它,相应的键等于word。
换句话说,如果我有一个字符串:“blahblahblah $%word $%blablablabla $%car $%” 和一本字典{word:'wassup',car:'toyota'}
字符串将是“blahblahblah wassup blablablabla toyota”
如何在python中实现它,我正在考虑使用字符串替换和正则表达式。
答案 0 :(得分:7)
使用re.sub
作为 repl 参数的函数:
import re
text = "blahblahblah $%word$% blablablabla $%car$%"
words = dict(word="wassup", car="toyota")
def replacement(match):
try:
return words[match.group(1)] # Lookup replacement string
except KeyError:
return match.group(0) # Return pattern unchanged
pattern = re.compile(r'\$%(\w+)\$%')
result = pattern.sub(replacement, text)
如果您想在使用re.sub
时传递替换表,请使用functools.partial
:
import functools
def replacement(table, match):
try:
return table[match.group(1)]
except:
return match.group(0)
table = dict(...)
result = pattern.sub(functools.partial(replacement, table), text)
...或实施__call__
的课程:
class Replacement(object):
def __init__(self, table):
self.table = table
def __call__(self, match):
try:
return self.table[match.group(1)]
except:
return match.group(0)
result = pattern.sub(Replacement(table), text)
答案 1 :(得分:1)
import re
text = "blahblahblah $%word$% blablablabla $%car$%"
words = dict(word="wassup", car="toyota")
regx = re.compile('(\$%%(%s)\$%%)' % '|'.join(words.iterkeys()))
print regx.sub(lambda mat: words[mat.group(2)], text)
结果
blahblahblah wassup blablablabla toyota
答案 2 :(得分:0)
re
模块是您想要的模块。
但您可能想重新考虑您选择的分隔符。 $%
可能会出现问题,因为$
是正则表达式中的保留字符。但是,请记住使用'\\$'
或r'\$'
(这是一个原始字符串。如果你在python中使用正则表达式的东西,这非常有用。)。