如何在python中使用变量代替字符串内的正则表达式搜索函数中的字符串

时间:2015-09-17 14:06:35

标签: python regex

我有这个正则表达式函数来提取字符串中的特定单词

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:并非在字符串格式化期间转换所有参数

为什么我收到此错误?如何解决这个问题

2 个答案:

答案 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更好,所以更有理由使用它!)