我需要使用正则表达式从以下目录路径中提取主机名。基本上,host1,host2,host3,host4,host5和host 6。
/opt/var/logs/2015/08/04/03/host1_syslog.log
/opt/var/logs/2015/08/04/03/host2_syslog.log
/opt/var/logs/2015/08/04/03/host3_syslog.log
/opt/var/logs/2015/08/04/03/host4_applog.log
/opt/var/logs/2015/08/04/03/host5_applog.log
/opt/var/logs/2015/08/04/03/host6_applog.log
解决这个问题,我设法匹配了没有扩展名的文件名:
([^\/]+)(?=\.\w+$)
即。的 host1_syslog
但不是主机名:
即。的主机1
在遇到下划线字符 _ 后,我无法弄清楚如何停止匹配。
感谢。
答案 0 :(得分:2)
([^\/]+)(?=_[a-zA-Z0-9]+\.\w+$)
您可以使用此。lookahead
明确添加_[a-zA-Z0-9]+
。
参见演示。
答案 1 :(得分:2)
答案 2 :(得分:0)
编辑2:
我认为这可能有用 - 贪婪地完成所有事情,包括最后一个斜线,然后捕获所有内容直到下划线:
'.*/([^_]+)'
编辑3 :(添加Python示例)
>>> import re
>>> print re.compile('.*/([^_]+)').search('/opt/var/logs/2015/08/04/03/host1_syslog.log').groups()
('host1',)