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

Kpr*_*ash 5 python regex variables python-2.7

所以我试图通过一个文件来查找由变量表示的关键字what2look4.每当我运行此程序时,它会一直返回空白数据.代码如下:

regex2=re.compile(".*(what2look4).*")
Run Code Online (Sandbox Code Playgroud)

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

hwn*_*wnd 13

你可以这样做......

>>> regex2 = re.compile('.*(%s).*'%what2look4)
Run Code Online (Sandbox Code Playgroud)

或者你可以使用格式:

>>> regex2 = re.compile('.*({}).*'.format(what2look4))
Run Code Online (Sandbox Code Playgroud)


小智 6

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

尽管它丑陋得多,但我建议使用字符串加法构建正则表达式模式。在这种情况下,这是最清晰、最不容易出错的方法。该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))
Run Code Online (Sandbox Code Playgroud)


Mar*_*cny 5

使用字符串格式

search = "whattolookfor"
regex2=re.compile(".*({}).*".format(search))
Run Code Online (Sandbox Code Playgroud)

{}字符串的内部将被替换为whattolookfor