Python 正则表达式时间、日期、id
我们使用的是相同的系统日志,我们希望显示方括号内的日期、时间和进程id。我们可以读取系统日志的每一行,并将内容传递给pid的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
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
请修改格式,您的问题是什么?请参阅。