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

时间:2017-09-24 19:37:51

标签: python regex string

我正在尝试从模板文件创建文件。 模板有一些元素需要根据用户输入或配置文件动态设置。 该模板包含我在下面的代码中的正则表达式的实例。 我想要做的只是用字典中的已知值替换正则表达式中包含的单词(\w)。 以下是我的代码:

def write_cmake_file(self):
    # pass
    with open (os.path.join(os.getcwd(), 'templates', self.template_name)) as f:
        lines = f.readlines()

    def replace_key_vals(match):
        for key, value in template_keys.iteritems():
            if key in match.string():
                return value

    regex = re.compile(r">>>>>{(\w+)}")
    for line in lines:
        line = re.sub(regex, replace_key_vals, line)

    with open(os.path.join(self.project_root, 'CMakeLists.txt'), 'w') as cmake_file:
        cmake_file.write(lines)

python解释器抱怨TypeError: 'str' object is not callable。 我想知道为什么这段代码不起作用,以及修复它的方法。

2 个答案:

答案 0 :(得分:0)

将您的代码更改为:

regex = re.compile(r">>>>>{(\w+)}")
for line in lines:
    line = regex.sub(replace_key_vals, line)
    #      ---^---

您正在编译正则表达式,之后尝试将其用作字符串,这将无效。

答案 1 :(得分:0)

以下代码解决了我的问题:

def write_cmake_file(self):
    # pass
    with open (os.path.join(os.getcwd(), 'templates', self.template_name)) as f:
        lines = f.readlines()

    def replace_key_vals(match):
        print match.string
        for key, value in template_keys.iteritems():
            if key in match.string:
                return value

    regex = re.compile(r">>>>>{(\w+)}")
    # for line in lines:
        # line = regex.sub(replace_key_vals, line)
    lines = [regex.sub(replace_key_vals, line) for line in lines]

    with open(os.path.join(self.project_root, 'CMakeLists.txt'), 'w') as cmake_file:
        cmake_file.writelines(lines)