我尝试使用递归,但似乎我不够好使它工作。
注意:
1)我不能使用解析程序,因为将使用这些数据的程序将使用正则表达式来捕获它,而这个程序是一个“通用”程序,实际上捕获任何需要的数据,唯一需要做的就是提供适当的正则表达式以获取所需信息,并使其尽可能紧凑,因此我不能使用第三方或外部程序。
2)'key':'value'对可以变化,它们不总是相同数目的配对...这就是我认为它很困难的原因。
3)将使用此正则表达式的程序在Python 2.7.3中创建: 此程序的工作方式: 它使用一个Json配置文件,在那里我可以设置我想要运行的命令,从而给我需要的数据,然后我指定一个正则表达式来教导程序需要捕获什么以及如何处理它,即: 对于被捕获的组要做什么...这就是为什么我不能使用解析器的原因。 此程序使用fabric来运行配置收集器(带有正则表达式)到远程主机并收集所有数据...
4)该程序用于收集数据以将其发布到web服务器,并获取度量和其他东西,如图表和监视报警等。
我已经能够捕获我计划捕获的几乎所有数据,但是当我尝试为此创建一个收集器时,我卡住了...
以下数据与下面完全重复,但具有不同的服务器名称,当然值也会改变:
Server: Omega-X
celery.queue_length: {'transfer_data': '0', 'factor_a': '0', 'slow': '0', 'factor_b': '0', 'score_retry': '0', 'damage_factor_c': '0', 'voice_ud': '0', 'alarm_factors_bl': '0', 'telemetry_x': '0', 'endstream': '0', 'celery': '0', 'awl': '0', 'prs': '0', 'score': '0', 'feature_factors_xf': '0', 'feature_factors_dc': '0'}
Server: Alfa-X
celery.queue_length: {'transfer_data': '0', 'factor_a': '0', 'slow': '0', 'factor_b': '0', 'score_retry': '0', 'damage_factor_c': '0', 'voice_ud': '0', 'alarm_factors_bl': '0', 'telemetry_x': '0', 'endstream': '0', 'celery': '0', 'awl': '0', 'prs': '0', 'score': '0', 'feature_factors_xf': '0', 'feature_factors_dc': '0'}
我想如何捕获它:
Server: Omega-X
transfer_data: 0
factor_a: 0
slow: 0
factor_b: 0
score_retry: 0
damage_factor_c: 0
voice_ud: 0
alarm_factors_bl: 0
telemetry_x: 0
endstream: 0
celery: 0
awl: 0
trx: 0
points: 0
feature_factors_xf: 0
feature_factors_dc: 0
Server: Alfa-X
transfer_data: 0
factor_a: 0
slow: 0
factor_b: 0
score_retry: 0
damage_factor_c: 0
voice_ud: 0
alarm_factors_bl: 0
telemetry_x: 0
endstream: 0
celery: 0
awl: 0
trx: 0
points: 0
feature_factors_xf: 0
feature_factors_dc: 0
如果显示的是唯一的服务器,那么使用下面的正则表达式可以捕获所有内容(除了服务器名称):
'([a-z_]+)':\s'(\d+)'
这个正则表达式只会提取第二部分,也就是变量和值的列表,但不包括服务器名... 所以如果在相同的输出中有多台服务器使用了相同的数据,那么就无法知道这些值来自哪个服务器...
如果我尝试添加对服务器名称的支持: 我尝试了下面这个正则表达式,它可以工作,但只能捕获服务器名称和第一组参数:
Server:\s([a-zA-Z0-9-]+)\s*celery\.queue_length:\s.('([a-z_]+)':\s'(\d+)')*
我尝试了多个递归功能,但都未能实现我想要的效果。
有没有人可以指引我正确的方向呢...?
谢谢。
celery\.queue_length: \{|,
并替换为\n
?请参见:https://regex101.com/r/rzmJgj/1 - CAustin