我有这个正则表达式函数来提取字符串中的特定单词
fileName = re.search(r'path1\w([A-Za-z\d]+)', self.fileList[0]).group(1)
path1 是一个实际的字符串
如果我想将fileName
变量替换为fileName = "path1"
我试过了:
print re.search(r'\w([A-Za-z\d]+)' % fileName, self.fileList[0]).group(1)
我收到了这个错误:
TypeError:并非在字符串格式化期间转换所有参数
为什么我收到此错误?如何解决这个问题
答案 0 :(得分:3)
你的正则表达式需要%s
:
print re.search(r'%s\w([A-Za-z\d]+)' % fileName, self.fileList[0]).group(1)
或者作为更加pythoinc和灵活的方式,您可以使用str.format
函数:
print re.search(r'{}\w([A-Za-z\d]+)'.format(fileName), self.fileList[0]).group(1)
注意,如果你有一个文件名列表,你可以循环它们并将文件名传递给format
,这是第二种方式。
答案 1 :(得分:0)
在将字符串插入像Regex这样的语言时应该非常小心。在这种情况下,您可能应首先转义字符串:
expression = r'{}\w([A-Za-z\d]+)'.format(re.escape(fileName))
re.search(expression, self.fileList[0]).group(1)
也许值得注意的是regex的名单:
import regex
expression = regex.compile(r'\L<filename>\w([A-Za-z\d]+)', filename=[fileName])
expression.search(self.fileList[0]).group(1)
这避免了必须使用正则表达式转义文字,并且如果有多个选项则效果更好。 (无论如何,加regex
更好,所以更有理由使用它!)