Python对于日志的分析常用正则表达式来进行,对于长篇累牍的日志,编写正则表达式确实是个技术+体力工作。 简单讲,海量的日志数据分为2种:
预定义好的JSON
这种日志相对比较容易解析,当然很少用到正则(鼓掌~)
写成API返回形式的日志,常用: , ‘ , “ , & , - 等字符连接,有时还会出现混合的情况,这种常用正则表达式来解析(终于意识到规范的重要性……)
下图列出了Python支持的正则表达式元字符和语法:
表中的元字符可以满足我们几乎所有的匹配需求(除了变态的乱码可以不考虑)。
今天遇到的问题是,在多个特殊字符之间,如何形成可选的(optional
) 比如:a = 'aa=8&bb=9&cc=10' b='aa=9&cc=10'
这里需要将a,b串中的k/v分别提出来,当在大型日志当中,经常会出现这种情况。
经过测试,下面的方法是可行的:
import re DD = re.compile(r"a=(?P<a><em><strong>[^\&]</strong></em>*)(\&b=(?P<b><em><strong>[^\&]</strong></em>*))?\&c=(?P<c><em><strong>[^\&]</strong></em>*)") mm = DD.match(a) mm.groupdict()
这样通配字符串,就可以实现多种optianal的匹配输出,适合用于项目较多较为复杂的Web Log或者API Log,具体的请注意斜体部分的字符,使用 [^\&]*
代替我们常用.*
,这也是匹配的重点所在。 好了,今天就说这么多,改天继续。
- 版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0
- 转载请注明:Chentao’s Home