【问题标题】:Regex to split up string of CPU usage percentages?正则表达式拆分 CPU 使用百分比字符串?
【发布时间】:2020-12-10 18:14:37
【问题描述】:

我们有一个 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 时返回如下值:

 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 上工作

谢谢!

【问题讨论】:

  • 您可以创建一个完整的模式并为所有百分比使用 3 个捕获组。例如:^\s*\d+\s+Secs\s*\(\s*(\d+(?:\.\d+)?%)\)\s+\d+\s+Secs\s+\(\s+(\d+(?:\.\d+)?%)\)\s+\d+\s+Secs\s+\(\s+(\d+(?:\.\d+)?%)\)$regex101.com/r/8PqwXK/1

标签: regex prtg


【解决方案1】:

使用\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

【讨论】:

  • 谢谢;你如何拆分它以创建一个 5 秒值的正则表达式,一个 60 秒值的正则表达式,一个 300 秒值的正则表达式?
  • @cvocvo 您可以使用量词{n} 来做到这一点,例如^(?:\s*\d+\s+Secs\s*\(\s*(\d+(?:\.\d+)?%)\)) 获得第一个或^(?:\s*\d+\s+Secs\s*\(\s*(\d+(?:\.\d+)?%)\)){2} 获得第二个等regex101.com/r/6hszTy/1^(?:\s*\d+\s+Secs\s*\(\s*(\d+(?:\.\d+)?%)\)){3} 获得第三个@ 987654323@ 并且在所有 3 种情况下,该值都在捕获组 1 中。
猜你喜欢
  • 2021-09-01
  • 2017-02-23
相关资源
最近更新 更多