如何将变量添加到我的re.compile表达式中

2024-10-01 11:34:29 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我试图在文件中查找由变量what2look4表示的关键字。无论何时我运行这个程序,它总是返回空白数据。代码如下:

regex2=re.compile(".*(what2look4).*")

我认为问题在于文件本身作为字符串搜索what2look4,而不是变量所表示的内容。如果我错了,请纠正我,谢谢你的帮助。


Tags: 文件数据字符串代码程序re内容关键字
3条回答

你可以这样做。。。

>>> regex2 = re.compile('.*(%s).*'%what2look4)

或者可以使用format

>>> regex2 = re.compile('.*({}).*'.format(what2look4))

如果你不小心,上面的答案会给你带来麻烦。在大多数情况下,您将希望使用re.escape()来转义试图插入的字符串变量中出现的任何可能的正则表达式元字符。此外,f字符串和.format()方法都需要使用大括号{},大括号本身就是正则表达式元字符。至少,如果你试着把这两者混合起来的话,你的皮棉会很合身。

虽然它更难看,但我建议使用字符串添加来构建regex模式。在这种情况下,它是最清晰、最不容易出错的方法。printf样式在Python中应该工作得很好,但我个人不推荐使用它,因为“%”符号是SQL中的通配符,而且我发现在regex中看到它很混乱。

考虑下面的例子,我们正在寻找一个文件名,可以在任何文件夹中,我们希望以日期结束。

# 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 ))

使用String format

search = "whattolookfor"
regex2=re.compile(".*({}).*".format(search))

字符串中的{}将替换为whattolookfor

相关问题 更多 >