我正在尝试使用正则表达式来解析AT命令结果中的元素。
其结构如下:
OK
AT!GSTATUS?
!GSTATUS:
Current Time: 2420 Temperature: 30
Reset Counter: 1 Mode: ONLINE
System mode: LTE PS state: Attached
LTE band: B30 LTE bw: 10 MHz
LTE Rx chan: 1234 LTE Tx chan: 12345
LTE CA state: NOT ASSIGNED
EMM state: Registered Normal Service
RRC state: RRC Idle
IMS reg state: No Srv
PCC RxM RSSI: -74 RSRP (dBm): -103
PCC RxD RSSI: -74 RSRP (dBm): -104
Tx Power: 0 TAC: 123A (1234)
RSRQ (dB): -12.4 Cell ID: 1234AB56 (12345678)
SINR (dB): 9.4
我希望在比赛中捕获冒号后面的所有属性,并在比赛中将结果捕获到另一组中。
|匹配|
|第1组|第2组|
当前,我想到了:
r" ([0-9A-Za-z()]+):\s*([0-9A-Za-z()]+\s?[0-9A-Za-z()]+[\n])" gm
https://regex101.com/r/DS6IIk/1
解决这个问题的最佳方法是什么?
答案 0 :(得分:1)
如果您的键值对可以具有仅用 空格分隔的“单词”(并且您的样本证明了它们确实如此),则可以匹配并捕获单个空格分隔的非空格冒号之前,冒号之后和任意数量的空格的大块:
(\S+(?: \S+)*): *(\S+(?: \S+)*)
请参见regex demo
要匹配任何水平空白,请用[^\S\r\n]
模式替换空格。
详细信息
(\S+(?: \S+)*)
-第1组:一个或多个非空白字符,后跟0+连续出现单个空格(如果使用[^\S\r\n]*
,则除LF和CR以外的任何零个或多个空格)然后是1+个非空白字符: *
-冒号后跟0+个空格(\S+(?: \S+)*)
-第2组:与第1组模式相同。