在Python正则表达式中使用变量

在Python正则表达式中使用变量,python,regex,Python,Regex,我正在分析一个文件,并在行中查找username-#,其中用户名将更改,破折号后可以有任意位数[0-9] 我尝试了几乎所有的组合,试图在正则表达式中使用变量username 我是否已经完成了类似于重新编译('%s-\d*'%user)?的工作,那么: re.compile(user + '-\d*') 以应有的方式开展工作: >>> user = 'heinz' >>> import re >>> regex = re.compile('%

我正在分析一个文件,并在行中查找
username-#
,其中用户名将更改,破折号后可以有任意位数
[0-9]

我尝试了几乎所有的组合,试图在正则表达式中使用变量
username

我是否已经完成了类似于重新编译('%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')
>user='heinz'
>>>进口稀土
>>>正则表达式=重新编译('%s-\d*'%user)
>>>正则表达式匹配('heinz-1')
>>>正则表达式匹配('heinz-11')
>>>正则表达式匹配('heinz-12345')
>>>正则表达式匹配('foo-12345')

您可以使用字符串的.format()方法创建字符串:

re.compile('{}-\d*'.format(user))

是的,您可以自己连接正则表达式,或者使用字符串格式。但是,如果您的变量可能包含在正则表达式中具有特殊意义的字符,请不要忘记使用。

我现在觉得自己很愚蠢。那么,为什么当我尝试在pdb中断中创建它时,它在python调试器中给了我一个SyntaxError,而它却不允许我在执行时创建它呢。调试器不是普通的python解释器吗?你在说什么?代码是从交互控制台复制粘贴的?您是否试图在调试器中复制粘贴的代码?请确保使用@Steven在回答中所说的
re.escape()
。例如,
regex=re.compile('%s-\d*'%re.escape(user))