正则表达式文件名与分隔符匹配

时间:2015-08-04 04:01:18

标签: regex

我需要使用正则表达式从以下目录路径中提取主机名。基本上,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

在遇到下划线字符 _ 后,我无法弄清楚如何停止匹配。

感谢。

3 个答案:

答案 0 :(得分:2)

([^\/]+)(?=_[a-zA-Z0-9]+\.\w+$)

您可以使用此。lookahead明确添加_[a-zA-Z0-9]+

参见演示。

https://regex101.com/r/fM9lY3/11

答案 1 :(得分:2)

在最后一次斜线到下划线后匹配:

(?<=\/)(?!.*\/)[^_]+

整个匹配是主机名(不需要组)。

请参阅live demo

答案 2 :(得分:0)

编辑2:

我认为这可能有用 - 贪婪地完成所有事情,包括最后一个斜线,然后捕获所有内容直到下划线:

  '.*/([^_]+)'

编辑3 :(添加Python示例)

>>> import re
>>> print re.compile('.*/([^_]+)').search('/opt/var/logs/2015/08/04/03/host1_syslog.log').groups()
('host1',)