正则表达式在时间后匹配字符串

Regex to Match string after time

努力从日志消息中提取主机名,当日期从 2 位数字变为一位数字时,它会搞砸,比如从 10 月 31 日到 11 月 1 日,关键字的提取开始失败......这里有一些日志我需要提取主机名

对于以上所有三行我都想提取

我目前使用的正则表达式是 ^(?:[^ \n]* ){4}(?P<devicename1>[^ ]+)

您可以使用

\s\d{2}(?::\d{2}){2}\s+(?P<devicename1>\S+)

参见regex demo

或者,更明确的模式:

^\w+\s+\d+\s+\d{2}(?::\d{2}){2}\s+(?P<devicename1>\S+)

参见 another demo

详情

  • ^\w+\s+\d+\s+ - 字符串开头,1+ 个单词字符,1+ 个空格,1+ 个数字,1+ 个空格(也就是说,确保我们得到正确的类似时间的子字符串)
  • \d{2} - 两位数
  • (?::\d{2}){2} - : 和两个数字
  • 的两个序列
  • \s+ - 1+ 个空格
  • (?P<devicename1>\S+) - 组 "devicename1":一个或多个非空白字符。

考虑到日期部分将始终是 3 个字符的月份,1-2 的日期和 HH:MM:ss 的时间:

^(?:\w{3}\s\d{1,2}\s\d{2}:\d{2}:\d{2}\s)(?P<devicename1>[^ ]+)

Regex 101