我正在尝试为程序使用 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/