【问题标题】:Using variables in Python regular expression [duplicate]在 Python 正则表达式中使用变量 [重复]
【发布时间】:2011-08-19 12:44:51
【问题描述】:

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

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

我什至接近re.compile('%s-\d*'%user)之类的东西吗?

【问题讨论】:

    标签: python regex


    【解决方案1】:

    怎么样:

    re.compile(user + '-\d*')
    

    【讨论】:

      【解决方案2】:

      按照应有的方式工作:

      >>> 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')
      

      【讨论】:

      • 我现在觉得自己很蠢。那么为什么当我尝试在 pdb 中断中创建它时它给了我一个语法错误
      • 在 python 调试器中,它不允许我在单步执行时创建它。调试器不是普通的python解释器吗? docs.python.org/library/pdb.html
      • 你在说什么?代码是从交互式控制台复制粘贴的吗?您是否尝试在调试器中复制粘贴的代码?
      • 确保使用re.escape() @Steven 在他的回答中说。例如。 regex = re.compile('%s-\d*'%re.escape(user)).
      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2013-06-17
          • 1970-01-01
          • 2013-09-11
          • 2015-01-21
          • 1970-01-01
          • 2017-11-04
          • 2014-01-06
          • 1970-01-01
          相关资源
          最近更新 更多