用于字符串替换的python正则表达式

时间:2011-08-24 21:24:58

标签: python regex string

我想替换包含以下单词“$%word $%”的字符串部分 我想用字典的值替换它,相应的键等于word。

换句话说,如果我有一个字符串:“blahblahblah $%word $%blablablabla $%car $%” 和一本字典{word:'wassup',car:'toyota'}

字符串将是“blahblahblah wassup blablablabla toyota”

如何在python中实现它,我正在考虑使用字符串替换和正则表达式。

3 个答案:

答案 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中使用正则表达式的东西,这非常有用。)。