在regex python中使用变量


问题内容

值得离开这里,这是我第二天使用Python,并且对这种语言不是很专业。任何低水平的建议和易于理解的方法将不胜感激。

我想在python的正则表达式中使用一个变量。我已经阅读了这个问题,如何在正则表达式中使用变量? 没有任何运气的答案。

码:

import time
import re

dia = time.strftime('%b %d')

final = open('/root/final.txt', 'ab')
file = open('/var/log/syslog', 'rb')

for line in file:
    if re.findall('kernel|\bNetworkManager\b', line):
        if re.findall(r'dia', line):
            final.write(line)

我认为有很多代码与该问题无关。我也if re.findall(r'%s'%dia, line)很幸运地尝试过这种解决方案。

既然我在这里,我想解释一下我的想法,看看我是否朝着正确的方向前进:

  1. 打开系统日志
  2. 查找内核和NetworkManager一词
  3. 如果今天是该行的开始,请写到final。

提前致谢。祝您新年快乐。


问题答案:

您不能在字符串中引用变量。字符串只是文本,它不知道名称空间,并且解释器不会为此解决它。

由于您的变量dia是一个字符串,因此您可以在调用时使用它re.findall

if re.findall(dia, line):
    pass

或类似的东西:

if re.findall(r"{0}".format(dia), line):
    pass

至于您所做工作的正确性,如果日志中时间戳的格式与您使用的相同,则它应该是正确的。

编辑:如果您正在从日志中读取字符串,则无需(或不应)以二进制形式打开它们,即b标志