我们使用相同的syslog,并且我们希望显示方括号中的日期、时间和进程id。我们可以读取syslog的每一行,并将内容传递给show_time_of_pid函数。
import re
def show_time_of_pid(line):
    pattern=r"^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec).*\d{2}:\d{2}:\d{2}\[(\d+)\]"
    result = re.search(pattern, line)
    return result这一点:
print(show_time_of_pid("Jul 6 14:01:23 computer.name CRON[29440]: USER (good_user)"))应打印:
Jul 6 14:01:23 pid:29440我们在show_time_of_pid实现中遗漏了什么?
发布于 2020-04-15 02:35:23
您的代码中有几个问题:
[和]应该在正则表达式模式中进行转义,因为它们是特殊符号(表示一组characters).我推荐阅读关于[]和groups的docs。此外,HOWTO在一年中的这个时候也很棒。
下面是一个有效的示例:
import re
def show_time_of_pid(line):
  pattern=r"^(?P<date_time>(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+\d{,2}\s+\d{2}:\d{2}:\d{2}).*\[(?P<pid>\d+)\]"
  re_result = re.search(pattern, line)
  result = f"{re_result.group('date_time')} pid:{re_result.group('pid')}"
  return result
print(show_time_of_pid("Jul 6 14:01:23 computer.name CRON[29440]: USER (good_user)"))输出:
Jul 6 14:01:23 pid:29440发布于 2020-07-05 12:10:54
简单解决方案
def show_time_of_pid(line):
    date_pattern = r'\w+ \d (\d:?)+'
    date_result = re.search(date_pattern, line)
    pid_pattern = r'\[(\d+)\]'
    pid_result = re.search(pid_pattern, line)
    if date_result == None or pid_result == None :
        return "None"
    return '{} pid:{}'.format(date_result[0], pid_result[1])发布于 2020-08-18 02:03:26
^(\w+)([\d: ]+).*(\d{2}:\d{2}:\d{2}).*\[(\d+)\]我做了4组,第一组代表月份,第二组代表日期,第三组代表时间,第四组代表pid。
https://stackoverflow.com/questions/61214063
复制相似问题