python : pass regex back-reference value to method

标签 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()

问题是 back-ref \1不等于 filename.in :

No such file or directory: '\\1'

有什么建议吗?

最佳答案

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)

关于 python : pass regex back-reference value to method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24720529/

相关文章:

python - Plone 4.3.3 - 模式驱动类型 - plone.directives.form 未导入

javascript - 字符串替换javascript

java - 使用正则表达式中的反向引用动态替换文本

javascript - 正则表达式:使用javascript测试最后一个单词后的url中是否存在最后一个斜杠?

bash - grep- 为什么反向引用周围必须有单词边界?

javascript - "Learning JavaScript"第 17 章 : Regular Expressions. ..反向引用示例失败

python - 如何在 Django CMS 中复制 PlaceholderField

python - wxPython 在 sizer 中居中对齐项目

Python - 在命名它包装的函数后调用包装函数

asp.net - 密码的正则表达式匹配