python - 在 python 中使用 re.sub 捕获替换的文本

标签 python regex python-2.7

我正在尝试为程序使用 re.sub 完成的所有文本替换创建一个报告。我无法弄清楚如何将替换的文本捕获到变量中。你们中的任何人都可以帮我做这件事吗?请找到下面的代码

import re

Report_file = open("report.txt", "w")
st = '''<item><AP>item1</AP><AP>Item2</AP><AP>item3</AP><AP>Item4</AP></item>'''

outval = re.sub(r'(?i)item1', "value1", st)
outval = re.sub(r'(?i)item2', "value2", outval)
outval = re.sub(r'(?i)item3', "value3", outval)  
print outval

我想要以下格式的报告文件

OLD: item1
NEW: value1

OLD: item2
NEW: value2

OLD: item3
NEW: value3

最佳答案

您需要使用函数而不是替换模式:

def build_replacer(replacement):
    def replace(match):
        print match.group(), replacement
        return replacement
    return replace

然后运行:

outval = re.sub(r'(?i)item1', build_replacer("value1"), st)
outval = re.sub(r'(?i)item2', build_replacer("value2"), outval)
outval = re.sub(r'(?i)item3', build_replacer("value3"), outval)  

它会打印原始文本和替换文本。

然后给出:

>>> st = '''<item><AP>item1</AP><AP>Item2</AP><AP>item3</AP><AP>Item4</AP></item>'''
>>> outval = re.sub(r'(?i)item1', build_replacer("value1"), st)
item1 value1
>>> outval = re.sub(r'(?i)item2', build_replacer("value2"), outval)
Item2 value2
>>> outval = re.sub(r'(?i)item3', build_replacer("value3"), outval)  
item3 value3
>>> outval
'<item><AP>value1</AP><AP>value2</AP><AP>value3</AP><AP>Item4</AP></item>'

当然,除了打印之外,您还可以将该信息存储在其他地方。

build_replacer() 函数只返回一个新函数,replace(),这是 re.sub() 将在任何时候使用的函数它找到一个匹配项。它不是直接替换匹配的文本,而是询问函数使用什么作为替换文本。

我们在这里将 build_replacer() 用作嵌套函数的原因是,我们可以将固定的替换文本存储在某处,并一遍又一遍地重复使用相同的替换函数,而无需硬编码替换文本。

关于python - 在 python 中使用 re.sub 捕获替换的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14938982/

相关文章:

python,正则表达式拆分和特殊字符

python - 查找条件为真的第一个列表元素

python - 如何在 Django 中模拟一种方式的一对一关系

Python/Ctypes - 访问指针(数组)时出现段错误

python - 将 Eclipse 配置为在完成时发出蜂鸣声(Python、Linux)

python - 新手对 mod_wsgi/apache/django 设置感到困惑

python - 使用正则表达式删除特定单词

regex - 条件正则表达式替换

python - 对没有年份但有 2 月 29 日的字符串日期列表进行排序

python - pip install 给出错误 : Unable to find vcvarsall. bat