Python正则表达式:将re模式格式与变量相结合

Python正则表达式:将re模式格式与变量相结合,python,regex,Python,Regex,我想结合python变量和模式。我怎么做 下面是我想做的 re.search(r'**some_variable+pattern**',str_for_pattern_match,flags) 谢谢你的帮助 re.search(r'**{0}+pattern**'.format(variable_name), str_for_pattern_match, flags) 现在,所有的{…}都将被解释为占位符。通常的字符串格式设置方法效果很好 re.search(r'**%s+pattern**

我想结合python变量和模式。我怎么做

下面是我想做的

re.search(r'**some_variable+pattern**',str_for_pattern_match,flags)
谢谢你的帮助

re.search(r'**{0}+pattern**'.format(variable_name), str_for_pattern_match, flags)

现在,所有的
{…}
都将被解释为占位符。

通常的字符串格式设置方法效果很好

re.search(r'**%s+pattern**' % some_variable, str_for_pattern_match, flags)

正则表达式模式并不是Python特别处理的一些特殊的额外事物。模式只是一个非常普通的字符串值,
re
模块将其解释为模式

所以问题不是“如何在模式中使用变量”,而是“如何基于变量构造字符串?”

Python文档中有大量关于如何实现这一点的信息。有关的文档将特别有用。为了构造正则表达式,其中最重要的可能是
str.format
(如eumiro的回答所示),它描述了如何以几乎任何您希望的方式将基本数据类型格式化为模板字符串


如果您能够掌握字符串的基本操作,那么将变量粘贴到正则表达式中将是您所能做的最少的事情

将字符串插入regexp模式时必须小心

这是因为字符串可能包含可能导致错误或产生意外结果的内容

举个例子:

>>> import re
>>> s = 'one*two*three*four*five'
>>> t = '*f'
>>> r = re.compile(r'%s\w+' % t)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/re.py", line 190, in compile
    return _compile(pattern, flags)
  File "/usr/lib/python2.7/re.py", line 244, in _compile
    raise error, v # invalid expression
sre_constants.error: nothing to repeat

使用Python的
f-string
语法(可能是最简单的语法)的更新:


但是需要注意的一点是:如果变量有特殊的元字符,它们将按原样处理。。。如果不需要,可能需要在占位符周围加上
\Q
\E
:`r'\Q{0}\E'事实上,我怀疑一个以两颗星开头、以两颗星结尾的正则表达式是否有效,因为我只想添加一个注释-您需要密切注意变量值,因为它可以被视为regexp的东西,应用此regexp后给出错误的结果。和你的相似。这可能对你有帮助。
>>> r = re.compile(r'%s\w+' % re.escape(t))
>>> r.findall(s)
['*four', '*five']
re.search(rf'**{some_variable}pattern**',str_for_pattern_match,flags)