Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正则表达式时间、日期、id_Python_Regex - Fatal编程技术网

Python 正则表达式时间、日期、id

Python 正则表达式时间、日期、id,python,regex,Python,Regex,我们使用的是相同的系统日志,我们希望显示方括号内的日期、时间和进程id。我们可以读取系统日志的每一行,并将内容传递给pid的show\u time\u函数 重新导入 def显示pid的时间(行): 模式=r“^(1月| 2月| 3月| 4月| 5月| 6月| 7月| 8月| 9月| 10月| 11月| 12月)*\d{2}:\d{2}:\d{2}\[(\d+)” 结果=重新搜索(图案、线条) 返回结果 这: print(显示pid的时间(“Jul 6 14:01:23 computer.nam

我们使用的是相同的系统日志,我们希望显示方括号内的日期、时间和进程id。我们可以读取系统日志的每一行,并将内容传递给pid的
show\u time\u
函数

重新导入
def显示pid的时间(行):
模式=r“^(1月| 2月| 3月| 4月| 5月| 6月| 7月| 8月| 9月| 10月| 11月| 12月)*\d{2}:\d{2}:\d{2}\[(\d+)”
结果=重新搜索(图案、线条)
返回结果
这:

print(显示pid的时间(“Jul 6 14:01:23 computer.name CRON[29440]:USER(good_USER)”)
应打印:

Jul 6 14:01:23 pid:29440

我们在pid的
显示时间您的代码中有一些问题:

  • [
    ]
    应在正则表达式模式中转义,因为它们是特殊符号(表示一组字符)
  • 您没有将组用于日期和时间,因此以后无法从结果中获取它
  • 您没有尝试从搜索结果中获取这些组(实际上有一个用于当月和pid的组)。您刚刚尝试打印搜索结果对象
我建议阅读关于
[]
和组的文章。一年中的这个时候也很棒

以下是一个工作示例:

重新导入
def显示pid的时间(行):
模式=r“(:一月|二月|三月|四月|五月|六月|七月|八月|九月|十月|十一月|十二月)s+\d{,2}\s+\d{2}:\d{2}.*\[(?P\d+\]
重新搜索结果=重新搜索(模式、线条)
result=f“{re_result.group('date_time')}pid:{re_result.group('pid')}”
返回结果
打印(显示pid的时间(“Jul 6 14:01:23 computer.name CRON[29440]:USER(good_USER)”)
输出:

Jul 6 14:01:23 pid:29440
Jul 6 14:02:08 pid:29187
Jul 6 14:02:09 pid:29187
Jul 6 14:03:01 pid:29440
Jul 6 14:03:40 pid:29807
Jul 6 14:04:01 pid:29440
Jul 6 14:05:01 pid:29440
Jul 6 14:01:23 pid:29440
简单解决方案

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

我分为4组,第一组表示月份,第二组表示日期,第三组表示时间,第四组表示pid。

这是我的解决方案。在引号中,第一个括号表达式是组(1),第二个是组(2),第三个是组(3),我们只需要组1和3

    import re
    def show_time_of_pid(line):
        pattern = r"(^\w* .\d*.\d*:\d*:\d+)(.*)\[(\d+)\]"
        result = re.search(pattern, line)
        return "{} pid:{}".format(result.group(1), result.group(3))

    print(show_time_of_pid("Jul 6 14:01:23 computer.name CRON[29440]: USER (good_user)"))
输出:

Jul 6 14:01:23 pid:29440
Jul 6 14:02:08 pid:29187
Jul 6 14:02:09 pid:29187
Jul 6 14:03:01 pid:29440
Jul 6 14:03:40 pid:29807
Jul 6 14:04:01 pid:29440
Jul 6 14:05:01 pid:29440

7月6日14:01:23 pid:29440

我建议大家看看自行车,而不是发明自行车。它稳定、成熟、可扩展、可生产。

简易解决方案和findall()方法的另一种方法:

import re
   def show_time_of_pid(line):
        pattern = r'^(\w+ [0-9] [0-9]+:[0-9]+:[0-9]+) [\w\.]+ [\w=]+\[([0-9]+)\]'
        result = re.search(pattern, line)
        return "{} pid:{} ".format(result[1], result[2])

  print(show_time_of_pid("Jul 6 14:01:23 computer.name CRON[29440]: USER (good_user)")) # Jul 6 14:01:23 pid:29440

  print(show_time_of_pid("Jul 6 14:02:08 computer.name jam_tag=psim[29187]: (UUID:006)")) # Jul 6 14:02:08 pid:29187

  print(show_time_of_pid("Jul 6 14:02:09 computer.name jam_tag=psim[29187]: (UUID:007)")) # Jul 6 14:02:09 pid:29187

  print(show_time_of_pid("Jul 6 14:03:01 computer.name CRON[29440]: USER (naughty_user)")) # Jul 6 14:03:01 pid:29440

  print(show_time_of_pid("Jul 6 14:03:40 computer.name cacheclient[29807]: start syncing from \"0xDEADBEEF\"")) # Jul 6 14:03:40 pid:29807

  print(show_time_of_pid("Jul 6 14:04:01 computer.name CRON[29440]: USER (naughty_user)")) # Jul 6 14:04:01 pid:29440

  print(show_time_of_pid("Jul 6 14:05:01 computer.name CRON[29440]: USER (naughty_user)")) # Jul 6 14:05:01 pid:29440
输出:

Jul 6 14:01:23 pid:29440
Jul 6 14:02:08 pid:29187
Jul 6 14:02:09 pid:29187
Jul 6 14:03:01 pid:29440
Jul 6 14:03:40 pid:29807
Jul 6 14:04:01 pid:29440
Jul 6 14:05:01 pid:29440

请修改格式,您的问题是什么?请参阅。