python:将regex反向引用值传递给方法

时间:2014-07-13 07:40:25

标签: python regex backreference

我有这样的内容:

Data1
import filename.in
Data2

并希望将import filename.in行替换为filename文件的内容,因此我使用此:

content = re.sub(r'import\s+(.*)\s+\n', '\n' + read_file('\1') + '\n', content)

read_file(in)会返回文件in的内容。

def read_file(file):
    with open(file) as f:
        return f.read()

问题是,反对\1没有评估到filename.in

No such file or directory: '\\1'

任何建议?

1 个答案:

答案 0 :(得分:3)

read_file(..)不是由re.sub调用的。 '\1'字面上用作文件名。除此之外,\1被解释为\x01

为此,您需要传递替换功能:

content = re.sub(
    r'import\s+(.*)\s+\n',
    lambda m: '\n' + read_file(m.group(1)) + '\n',  # `m` is a match object
    content)