在Python中解析以下消息(使用正则表达式)
message =' OK - physical_ok:23/24 signal_up:23/24。细节:OK:span-1:ok:UP:已连接OK:span-2:ok:UP:已连接OK:span-3:ok:UP:已连接OK:span-4:ok:UP:已连接OK:span- 5:ok:UP:已连接OK:span-6:ok:UP:已连接OK:span-7:ok:UP:已连接OK:span-8:ok:UP:已连接OK:span-9:ok:UP:已连接正常:span-10:ok:UP:已连接正常:span-11:报警:DOWN:已断开正常:span-12:ok:UP:已连接正常:span-13:ok:UP:已连接正常:span-14 :ok:UP:已连接OK:span-15:ok:UP:已连接OK:span-16:ok:UP:已连接OK:span-17:ok:UP:已连接OK:span-18:ok:UP:已连接OK:span-19:ok:UP:已连接OK:span-20:ok:UP:已连接OK:span-21:ok:UP:已连接OK:span-22:ok:UP:已连接OK:span-23: ok:UP:已连接OK:span-24:ok:UP:已连接| physical_ok = 23; 24 signal_up = 23; 24 \ n'
以下正则表达式
re.findall('[A-Z]+:span-[0-9]+:[a-z]+:[A-Z]+:[a-zA-Z]+', message)
返回
['OK:span-1:ok:UP:Connected',
'OK:span-2:ok:UP:Connected',
'OK:span-3:ok:UP:Connected',
'OK:span-4:ok:UP:Connected',
'OK:span-5:ok:UP:Connected',
'OK:span-6:ok:UP:Connected',
'OK:span-7:ok:UP:Connected',
'OK:span-8:ok:UP:Connected',
'OK:span-9:ok:UP:Connected',
'OK:span-10:ok:UP:Connected',
'OK:span-11:alarmed:DOWN:Disconnected',
'OK:span-12:ok:UP:Connected',
'OK:span-13:ok:UP:Connected',
'OK:span-14:ok:UP:Connected',
'OK:span-15:ok:UP:Connected',
'OK:span-16:ok:UP:Connected',
'OK:span-17:ok:UP:Connected',
'OK:span-18:ok:UP:Connected',
'OK:span-19:ok:UP:Connected',
'OK:span-20:ok:UP:Connected',
'OK:span-21:ok:UP:Connected',
'OK:span-22:ok:UP:Connected',
'OK:span-23:ok:UP:Connected',
'OK:span-24:ok:UP:Connected']
我想找到除以下字符串以外的所有结果:
" OK:翼展[0-9] +:好:UP:连接"
对于上面的示例,正则表达式只应返回'OK:span-11:alarmed:DOWN:Disconnected'
答案 0 :(得分:3)
您可以添加否定前瞻以将匹配限制为您想要的匹配:
\b(?!OK:span-[0-9]+:ok:UP:Connected)[A-Z]+:span-[0-9]+:[a-z]+:[A-Z]+:[a-zA-Z]+\b
请参阅regex demo
前瞻确保我们不匹配我们不想要的子字符串(以OK:span-
开头,然后是一些数字([0-9]
),以:ok:UP:Connected
结尾)。