我想结合一个python变量和模式.我该怎么做?
以下是我想做的事情.
re.search(r'**some_variable+pattern**',str_for_pattern_match,flags)
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助.
lig*_*lig 16
通常的字符串格式化方式很有效
re.search(r'**%s+pattern**' % some_variable, str_for_pattern_match, flags)
Run Code Online (Sandbox Code Playgroud)
re.search(r'**{0}+pattern**'.format(variable_name), str_for_pattern_match, flags)
Run Code Online (Sandbox Code Playgroud)
现在,您的所有内容都{…}
将被解释为字符串格式的占位符。
将字符串插入正则表达式模式时必须小心.
这是因为字符串可能包含特殊的正则表达式字符,这可能导致错误或产生意外结果.
举个例子:
>>> 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
Run Code Online (Sandbox Code Playgroud)
这会失败,因为插入的字符串包含*
,这是一个特殊的正则表达式字符.
但是,可以通过使用re.escape
插入的字符串上的函数来解决此问题:
>>> r = re.compile(r'%s\w+' % re.escape(t))
>>> r.findall(s)
['*four', '*five']
Run Code Online (Sandbox Code Playgroud)