regex - 正则表达式在时间后匹配字符串
问题描述
努力从日志消息中提取主机名,当日期从 2 位变为一位时,例如从 10 月 31 日到 11 月 1 日,关键字的提取开始失败......这里有一些我需要提取的日志主机名
- 11 月 1 日 00:00:21 akdcs20.ftc.abcd-ipsn AKDCS20 fpc0 LBCM-L2,brcm_port_learning_config(),1258:(brcm_port_learning_config:1258) 设置 L2 学习单元:0,port_num:44, learn_flg 5
11 月 1 日 01:27:16 spnztpm01.abcd-ipsn 553177:LC/0/0/CPU0:Nov 1 01:27:16.040:ifmgr[200]:%PKT_INFRA-LINEPROTO-5-UPDOWN:接口 TenGigE0/ 上的线路协议0/0/1.172153,将状态更改为向上
10 月 31 日 23:59:56 akdcs19.ftc.abcd-ipsn AKDCS19 ufdd[1679]: ufd_group_config_if_lookup ifname ae4
对于以上所有三行,我想提取
- akdcs19.ftc.abcd-ipsn
- spnztpm01.abcd-ipsn
- akdcs20.ftc.abcd-ipsn
我正在使用的当前正则表达式是
^(?:[^ \n]* ){4}(?P<devicename1>[^ ]+)
解决方案
您可以使用
\s\d{2}(?::\d{2}){2}\s+(?P<devicename1>\S+)
请参阅正则表达式演示。
或者,更明确的模式:
^\w+\s+\d+\s+\d{2}(?::\d{2}){2}\s+(?P<devicename1>\S+)
查看另一个演示。
细节
^\w+\s+\d+\s+
- 字符串开头,1+ 单词字符,1+ 空格,1+ 数字,1+ 空格(即,确保我们得到正确的时间类子字符串)\d{2}
- 两位数(?::\d{2}){2}
- 两个序列:
和两个数字\s+
- 1+ 空格(?P<devicename1>\S+)
- 组“devicename1”:一个或多个非空白字符。
推荐阅读
- c# - 从登录调用 MVC View
- django-templates - Django:无法剪切数组
- neural-network - Caffe - 网络不学习
- excel - 如何在vba中声明从x1到xi等一系列变量
- jenkins - jenkins 可以过期多分支作业吗?
- python - 使用 :symbols 从 Python 生成 Clojure EDN
- couchdb - 我的单个 couchdb 节点中是否有每个文档的多个副本?
- android - 如何将源项目添加到项目中
- python - __init__() 中定义的类属性与类方法定义的属性
- python-3.x - AWS EC2 ubuntu 实例中的 CNTK 安装错误