Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Regex:Key,值多次,仅当存在MAC时_Python_Regex - Fatal编程技术网

Python Regex:Key,值多次,仅当存在MAC时

Python Regex:Key,值多次,仅当存在MAC时,python,regex,Python,Regex,这有多难?? 我有以下几行: 2021-05-25 14:54:11,517 INFO:[APP-MESSENGER] rx messages: meta_data=IfData={'dt': '12:54:11.516', 'meta': BleDevice={'id': 0, 'name': 'CD:7C:2D:0E:C4:04', 'rssi': -40}, 'header': Header={'timestamp': 56903198}}, len=10, msgs=[SysHeapIn

这有多难?? 我有以下几行:

2021-05-25 14:54:11,517 INFO:[APP-MESSENGER] rx messages: meta_data=IfData={'dt': '12:54:11.516', 'meta':
BleDevice={'id': 0, 'name': 'CD:7C:2D:0E:C4:04', 'rssi': -40}, 'header': Header={'timestamp': 56903198}},
len=10, msgs=[SysHeapInfo={'time': 56003295, 'free_heap': 22504, 'min_ever_free_heap': 22320,
'data_queue_free': 50}, SysHeapInfo={'time': 56103271, 'free_heap': 22504, 'min_ever_free_heap': 22320,
'data_queue_free': 50}, SysHeapInfo={'time': 56203247, 'free_heap': 22504, 'min_ever_free_heap': 22320,
'data_queue_free': 50}, SysHeapInfo={'time': 56303222, 'free_heap': 22504, 'min_ever_free_heap': 22320,
'data_queue_free': 50}, SysHeapInfo={'time': 56403198, 'free_heap': 22504, 'min_ever_free_heap': 22320,
'data_queue_free': 50}, SysHeapInfo={'time': 56503173, 'free_heap': 22504, 'min_ever_free_heap': 22320,
...
在该行中有多个相同的键、值对,其键为
time
data\u queue\u free

我想要的是一个2D数组,第一列是time键的值,第二列是data\u queue\u free键。但如果该行中存在MAC(CD:7C:2D:0E:C4:04),则为on

到目前为止,我想到的是:

(?:CD:7C:2D:0E:D4:04){1}((时间:(\d+)|(数据队列:(\d+)))

如果没有MAC,它可以正常工作,但是我没有MAC过滤器


((time':(\d+)|(data\u queue\u free':(\d+))
您可以采取两步方法,首先捕获组1中MAC地址
CD:7C:2D:0E:C4:04之后的所有内容

^.*?'CD:7C:2D:0E:C4:04'([\s\S]+)

如果该模式的匹配范围太广,您还可以将匹配限制在
SysHeapInfo=
部分内(假设数据以
]结束)

^.*?'CD:7C:2D:0E:C4:04'[^][]*\[(SysHeapInfo={[^{}]*}(?:,\s*SysHeapInfo={[^{}]*})*)]

然后将该模式与第一个模式的group 1值上的time和data_queue_free两个组一起使用,并将这些值添加到它们自己的列表中

输出

['50', '50', '50', '50', '50']
['56003295', '56103271', '56203247', '56303222', '56403198', '56503173']
请注意如果数据中的值始终存在且按该顺序排列,则不必使用替代项
|
,但也可以按该顺序匹配它们:

'time': (\d+),[^{}]*'data_queue_free': (\d+)

您可以采取两步方法,首先捕获组1中MAC地址
CD:7C:2D:0E:C4:04之后的所有内容

^.*?'CD:7C:2D:0E:C4:04'([\s\S]+)

如果该模式的匹配范围太广,您还可以将匹配限制在
SysHeapInfo=
部分内(假设数据以
]结束)

^.*?'CD:7C:2D:0E:C4:04'[^][]*\[(SysHeapInfo={[^{}]*}(?:,\s*SysHeapInfo={[^{}]*})*)]

然后将该模式与第一个模式的group 1值上的time和data_queue_free两个组一起使用,并将这些值添加到它们自己的列表中

输出

['50', '50', '50', '50', '50']
['56003295', '56103271', '56203247', '56303222', '56403198', '56503173']
请注意如果数据中的值始终存在且按该顺序排列,则不必使用替代项
|
,但也可以按该顺序匹配它们:

'time': (\d+),[^{}]*'data_queue_free': (\d+)

正确使用2个正则表达式组合以获得所需输出正确使用2个正则表达式组合以获得所需输出