所以我试图通过一个文件来查找由变量what2look4
表示的关键字。每当我运行此程序时,它会一直返回空白数据。代码如下:
regex2=re.compile(".*(what2look4).*")
我认为问题是该文件正在搜索what2look4
本身而不是该变量所代表的字符串。如果我错了请纠正我,谢谢你的帮助。
你可以这样做......
>>> regex2 = re.compile('.*(%s).*'%what2look4)
或者你可以使用format:
>>> regex2 = re.compile('.*({}).*'.format(what2look4))
search = "whattolookfor"
regex2=re.compile(".*({}).*".format(search))
字符串中的{}
将替换为whattolookfor
如果你不小心,上面的答案会让你陷入困境。在大多数情况下,您将需要使用re.escape()
来转义出现在您尝试插入的字符串变量中的任何可能的正则表达式元字符。另外,f-strings和.format()
方法都需要使用花括号{},它们是正则表达式元字符本身。至少,如果你试图混合两者,你的短绒将会发挥合适。
虽然它更加丑陋,但我建议使用字符串添加来构建正则表达式模式。在这种情况下,它是最清晰,最不容易出错的方法。 printf样式应该可以在Python中正常工作,但我个人不推荐它,因为“%”符号是SQL中的通配符运算符,我发现在正则表达式中看起来很混乱。
考虑下面的示例,我们正在寻找可以在任何文件夹中的文件名,并且我们希望以日期结束。
# Note that "\d" is a regular expression metacharacter!
file_name_var = "\data"
# Option 1: string addition
re.compile(r'^.*' + re.escape(file_name_var ) + r'_\d{4}-\d{2}-\d{2}.csv$')
# Option 2: printf style
re.compile(r'^.*%s_\d{4}-\d{2}-\d{2}.csv$' % re.escape(file_name_var ))