关于regex:python typeerror在re.sub中使用变量时

Python TypeError when using variable in re.sub

我刚接触过python,做最简单的事情时总是出错。

我试图在正则表达式中使用一个变量,并将其替换为*

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

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

错误:回溯(最近一次呼叫的最后一次):文件",第1行,在?类型错误:并非所有参数都在字符串格式化过程中转换

有什么小窍门吗?


问题出在这条线上:

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

您要做的是将文本中来自字符串file*替换为%s(在这种情况下,我建议重命名变量filename,以避免隐藏内置的file对象,并使其更明确地显示您正在使用的对象)。然后,您试图将(已经替换的)文本中的%s替换为pattern。但是,file中没有任何格式修改器,导致了TypeError的出现。基本上是一样的:

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

这会给你同样的错误。

你可能想要的是:

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

完全等同于:

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

试试re.sub(pattern,"*", file)?或者干脆跳过re,只做file.replace("123","*")