Python正则表达式:将re模式格式与变量结合
我想把一个Python变量和一个模式结合在一起。请问我该怎么做呢?
下面是我想要实现的内容。
re.search(r'**some_variable+pattern**',str_for_pattern_match,flags)
谢谢你的帮助。
5 个回答
6
在把字符串放进正则表达式的模式里时,你得小心。
这是因为这个字符串可能包含一些特殊的正则表达式字符,这些字符可能会导致错误或者让结果变得意外。
举个例子:
>>> 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
这个例子会失败,因为插入的字符串里有一个*
,它是个特殊的正则表达式字符。
不过,这个问题可以通过对插入的字符串使用re.escape
函数来解决:
>>> r = re.compile(r'%s\w+' % re.escape(t))
>>> r.findall(s)
['*four', '*five']
16
通常的字符串格式化方法效果很好
re.search(r'**%s+pattern**' % some_variable, str_for_pattern_match, flags)