0

有人可以帮我解决这个正则表达式吗?我想提取 1. 或 2.

1.

(2624594000) 303 days, 18:32:20.00  <-- Timeticks
.1.3.6.1.4.1.14179.2.6.3.39.        <-- OID
Hex-STRING: 54 4A 00 C8 73 70   <-- Hex-STRING (need "Hex-STRING" ifself too)
0                                   <--INTEGER
"NJTHAP027"                         <- STRING

或者

2.

Timeticks: (2624594000) 303 days, 18:32:20.00
OID: .1.3.6.1.4.1.14179.2.6.3.39
Hex-STRING: 54 4A 00 C8 73 70
INTEGER: 0
STRING: "NJTHAP027"
  • 这个文件名和值每次都会返回不同的数据。(数据将是可变的。)

我不需要获取字段名称,只想从顶部按顺序获取值(多值)

(?s)[^=]+\s=\s(?<value_v2c>([^=]+)-)

https://regex101.com/r/lsKeEM/2 -> 我无法提取最后一个字符串:“NJTHAP027”!

4

1 回答 1

2

命名组value_v2c已经是一个组,因此您可以省略内部捕获组。

目前,-char 应该始终在模式中匹配,但您可以匹配它或断言字符串的结尾。

当您使用否定字符类和[^=]+and\s时,您可以省略 inline 修饰符(?s),因为它们都已经匹配换行符。

要匹配2.变体,您可以将模式更新为:

[^=]+\s=\s(?<value_v2c>[^=]+)(?:-|$)

正则表达式演示

要获取1.版本,您可以匹配冒号之前的所有内容,只要它不是十六进制字符串即可。

然后在组中可选地匹配它。

[^=]+\s=\s(?:(?!Hex-STRING:)[^:])*:?\s*(?<value_v2c>(?:Hex-STRING: )?[^=]+?)(?: -|$)

正则表达式演示

于 2022-02-01T10:53:40.590 回答