我可以写一个正则表达式来匹配一个日志行。但是我的文件包含一些与其他日志行不同的日志行,因为只有一些额外的字段或少数几个,键值对被混淆。
EG。一个日志行:
case_id=1 event_id=35654423 date=30-12-2010 time=11.02 activity=registerrequest name=Pete costs=50 rerr="-"
case_id=1 event_id=35654424 date=31-12-2010 time=11.07 costs=400 rerr="-" activity=examinethoroughly name=Sue rloc="-"
我的日志模式= "^([^\s]+)\s([^\s]+)\s([^\s]+)\s([^\s]+)\s([^\s]+)\s([^\s]+)\s([^\s]+)\s([^\s]+)"
这是我在spark中分组的代码:
match = re.search(LOG_PATTERN,line)
Case_ID = match.group(1)
Event_ID = match.group(2)
Date = match.group(3)
Time = match.group(4)
Activity = match.group(5)
Resource = match.group(6)
Costs = match.group(7)
Rerr = match.group(8)
此代码仅匹配第一个日志行。 我如何编写一个正则表达式,以便我可以将它们分组为spark而不忽略任何日志行?
答案 0 :(得分:1)
我建议您使用简单的正则表达式来获取键和值:
rx = "(\\S+)=(\\S+)"
或
rx = "(\\w+)=(\\S+)"
查看regex demo。
然后,使用re.findall
:
d = dict([(x,y) for x,y in re.findall(rx,line)])
然后,您可以访问每个键值。