擅长:python、mysql、java
<p>如果你不小心,上面的答案会给你带来麻烦。在大多数情况下,您将希望使用<code>re.escape()</code>来转义试图插入的字符串变量中出现的任何可能的正则表达式元字符。此外,f字符串和<code>.format()</code>方法都需要使用大括号{},大括号本身就是正则表达式元字符。至少,如果你试着把这两者混合起来的话,你的皮棉会很合身。</p>
<p>虽然它更难看,但我建议使用字符串添加来构建regex模式。在这种情况下,它是最清晰、最不容易出错的方法。printf样式在Python中应该工作得很好,但我个人不推荐使用它,因为“%”符号是SQL中的通配符,而且我发现在regex中看到它很混乱。</p>
<p>考虑下面的例子,我们正在寻找一个文件名,可以在任何文件夹中,我们希望以日期结束。</p>
<pre><code># 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 ))
</code></pre>