解析 AT 命令的正则表达式
Regex to Parse AT Commands
我正在尝试使用正则表达式来解析 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 组 |
- 小区 ID | 1232AA96 (12345678) |
- TAC | 123A (1234) |
目前,我想出了:
r" ([0-9A-Za-z()]+):\s*([0-9A-Za-z()]+\s?[0-9A-Za-z()]+[\n])" gm
https://regex101.com/r/DS6IIk/1
解决这个问题的最佳方法是什么?
如果您的键值对可以有 "words" 并且仅用 单个 space 分隔(并且您的示例证明它们确实如此),您可以匹配并捕获单个白色 space 分隔的非白色 space 块在冒号之前和冒号之后以及任意数量的白色 space:
(\S+(?: \S+)*): *(\S+(?: \S+)*)
要匹配任何水平白色space,请将 space 替换为 [^\S\r\n]
模式。
详情
(\S+(?: \S+)*)
- 第 1 组:一个或多个非白色 space 字符后跟单个 space 连续出现 0 次以上(如果您使用 [^\S\r\n]*
,除了 LF 和 CR 之外的任何零个或多个白色 space,然后是 1+ 个非白色 space 字符
: *
- 冒号后跟 0+ spaces
(\S+(?: \S+)*)
- 第 2 组:与第 1 组模式相同。
我正在尝试使用正则表达式来解析 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 组 |
- 小区 ID | 1232AA96 (12345678) |
- TAC | 123A (1234) |
目前,我想出了:
r" ([0-9A-Za-z()]+):\s*([0-9A-Za-z()]+\s?[0-9A-Za-z()]+[\n])" gm
https://regex101.com/r/DS6IIk/1
解决这个问题的最佳方法是什么?
如果您的键值对可以有 "words" 并且仅用 单个 space 分隔(并且您的示例证明它们确实如此),您可以匹配并捕获单个白色 space 分隔的非白色 space 块在冒号之前和冒号之后以及任意数量的白色 space:
(\S+(?: \S+)*): *(\S+(?: \S+)*)
要匹配任何水平白色space,请将 space 替换为 [^\S\r\n]
模式。
详情
(\S+(?: \S+)*)
- 第 1 组:一个或多个非白色 space 字符后跟单个 space 连续出现 0 次以上(如果您使用[^\S\r\n]*
,除了 LF 和 CR 之外的任何零个或多个白色 space,然后是 1+ 个非白色 space 字符: *
- 冒号后跟 0+ spaces(\S+(?: \S+)*)
- 第 2 组:与第 1 组模式相同。