正则表达式匹配显示超过3周的条目

问题描述 投票:0回答:1

我得到一个关于设备正常运行时间的字符串,如下所示:

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基础设施合规审计政策)

java regex cisco
1个回答
0
投票

我设法使用以下正则表达式:

(\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
© www.soinside.com 2019 - 2024. All rights reserved.