在正则表达式

时间:2015-06-23 10:41:13

标签: regex python-2.7

在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'

1 个答案:

答案 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结尾)。