在re.sub中使用变量时的Python TypeError

时间:2013-02-07 01:18:38

标签: python regex

我是python的新手,我一直在做最简单的事情。

我正在尝试在正则表达式中使用变量,并用*

替换它

下面的错误是“TypeError:不是在字符串格式化期间转换的所有参数”,我不知道为什么。这应该是这么简单。

import re
file = "my123filename.zip"
pattern = "123"
re.sub(r'%s', "*", file) % pattern

错误: Traceback(最近一次调用最后一次):   文件“”,第1行,在? TypeError:不是在字符串格式化期间转换的所有参数

任何提示?

2 个答案:

答案 0 :(得分:5)

你的问题在于这一行:

re.sub(r'%s', "*", file) % pattern

您正在做的是用字符串%s替换文本*file的每一次出现(在这种情况下,我建议重命名变量{{1}避免遮蔽内置的filename对象,并使其更明确地与您合作。然后,您尝试将{已替换的)文本中的file替换为%s。但是,pattern中没有任何格式修饰符,这会导致您看到的file。它基本上与:

相同
TypeError

会给你同样的错误。

你可能想要的更像是:

'this is a string' % ("foobar!")

完全等同于:

re.sub(str(pattern),'*',file)

答案 1 :(得分:0)

试试re.sub(pattern, "*", file)?或者可以完全跳过re而只是file.replace("123", "*")