正则表达式拆分 CPU 使用百分比的字符串?

Regex to split up string of CPU usage percentages?

我们有一个 HP 1920S 交换机,通过 SNMP 获取 CPU 使用的唯一方法是我在此处找到的 OID:https://community.hpe.com/t5/Web-and-Unmanaged/HP-1920s-OID-CPU-Utilization-and-memory/td-p/7001413

OID:.1.3.6.1.4.1.11.5.7.5.7.1.1.1.1.4.9.0

当通过 SNMP 查询 OID returns 值如下:

 5 Secs ( 22.3463%) 60 Secs ( 25.677%) 300 Secs ( 21.3522%)
 5 Secs ( 13.6713%) 60 Secs ( 15.3520%) 300 Secs ( 15.9640%)

所以 5 秒 CPU 平均利用率是 22%,60 秒是 25%,5 分钟是 21%。然后下一次查询是13%、15%、15%。

有没有办法通过正则表达式离散匹配 5 秒百分比或离散匹配 60 秒百分比或 5 分钟百分比?目标是将其连接到 PRTG 中的几个 SNMP 自定义字符串传感器,这样它就可以在 5 分钟平均值高于 80% 时发出警报,例如。 我在这里很好地处理了这个正则表达式:\d+(\%|\s\bpercent\b) 通过 https://www.regextester.com/95112 但我也不知道如何根据我的需要修改它并且无法让它在 regex101.com[=16 上工作=]

谢谢!

使用 \d+(\%|\s\bpercent\b) 将不会匹配示例字符串中的小数部分。

您可以添加匹配的可选小数部分 \d+(?:\.\d+)?(?:\%|\s\bpercent\b) ,但您会得到 3 个匹配项并且模式不匹配 Secs

您的查询返回了 2 次相同结构的数据。一种方法是使用与整行匹配的模式并使用 3 个捕获组,以便您知道哪个组具有哪个值。

示例数据中没有单词 percentage,因此您可以使用 % 代替。

^\s*\d+\s+Secs\s*\(\s*(\d+(?:\.\d+)?%)\)\s+\d+\s+Secs\s+\(\s+(\d+(?:\.\d+)?%)\)\s+\d+\s+Secs\s+\(\s+(\d+(?:\.\d+)?%)\)$

Regex demo