записи соответствия регулярному выражению, отображающие более 3 недель - PullRequest
0 голосов
/ 12 марта 2019

Я получаю строку о работоспособности устройства, которая выглядит следующим образом:

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

Таким образом, местоимения меняются от недели к неделе, если они употребляются в единственном числе. Есть ли регулярное выражение, которое дает мне совпадение, если есть более х недель? Это не должно давать совпадение, если не найдено недель. Мне нужен результат в группе, так как я упоминаю об этом позже в моей книге правил. (Основные политики аудита соответствия инфраструктуры)

1 Ответ

0 голосов
/ 12 марта 2019

Мне удалось сделать это с помощью следующего регулярного выражения:

(\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
...