【发布时间】:2011-08-19 12:44:51
【问题描述】:
我正在解析一个文件并在 username-# 的行中查找用户名将更改的行,并且破折号后可以有任意数量的数字 [0-9]。
我尝试了几乎所有组合,试图在正则表达式中使用变量username。
我什至接近re.compile('%s-\d*'%user)之类的东西吗?
【问题讨论】:
我正在解析一个文件并在 username-# 的行中查找用户名将更改的行,并且破折号后可以有任意数量的数字 [0-9]。
我尝试了几乎所有组合,试图在正则表达式中使用变量username。
我什至接近re.compile('%s-\d*'%user)之类的东西吗?
【问题讨论】:
怎么样:
re.compile(user + '-\d*')
【讨论】:
按照应有的方式工作:
>>> user = 'heinz'
>>> import re
>>> regex = re.compile('%s-\d*'%user)
>>> regex.match('heinz-1')
<_sre.SRE_Match object at 0x2b27a18e3f38>
>>> regex.match('heinz-11')
<_sre.SRE_Match object at 0x2b27a2f7c030>
>>> regex.match('heinz-12345')
<_sre.SRE_Match object at 0x2b27a18e3f38>
>>> regex.match('foo-12345')
【讨论】:
re.escape() @Steven 在他的回答中说。例如。 regex = re.compile('%s-\d*'%re.escape(user)).
您可以使用字符串的 .format() 方法创建字符串:
re.compile('{}-\d*'.format(user))
【讨论】:
是的,自己连接正则表达式,或使用字符串格式。但是,如果您的变量可能包含在正则表达式中具有特殊含义的字符,请不要忘记使用 re.escape()。
【讨论】: