我得到一个关于设备正常运行时间的字符串,如下所示:
swLUZ01 uptime is 1 year, 11 weeks, 1 day, 11 hours, 9 minutes
我构建了一个匹配前两个条目的正则表达式并将它们放在一个组中:
(\D+\d+) uptime is (\d+ \w+\, \d+ \w+)
这项工作到目前为止。现在我想只捕获超过3周的设备。在此示例中,它适用于以下正则表达式:
(\D+\d+) uptime is (\d+ \w+\, ([3-9]|\d{2}) weeks)
但这只有在每次和每周都以相同的顺序出现时才有效。遗憾的是,设备的正常运行时间可能如下所示:
swLUZ01 uptime is 4 weeks, 5 days, 14 hours, 2 minutes
swLUZ01 uptime is 1 week, 2 days, 9 hours, 55 minutes
swLUZ01 uptime is 1 hour, 16 minutes
因此,如果单数,则发音从几周变为一周。如果超过x周,是否有正则表达式给我一个匹配?如果根本找不到星期,它就不应该给出匹配。我需要组中的结果,因为我稍后会在我的规则手册中引用它。 (Prime基础设施合规审计政策)
我设法使用以下正则表达式:
(\D+\d+) uptime is ((\d+ years?\,\s)\d+ \w+)|(([3-9]|\d{2}) weeks\,\s\d+ \w+)
这给了我以下示例中的捕获(粗体)中的2个值:
swLUZ01 uptime is 11 weeks, 1 day, 11 hours, 9 minutes
回馈:11周,1天
swLUZ01 uptime is 1 year, 1 week, 1 day, 11 hours, 9 minutes
回馈:1年,1周
swLUZ01 uptime is 2 years, 11 weeks, 1 day, 11 hours, 9 minutes
回馈:2年11周
它与以下示例不符:
swLUZ01 uptime is 2 weeks, 1 day, 11 hours, 9 minutes
swLUZ01 uptime is 5 days, 11 hours, 9 minutes