Python正则

Python对于日志的分析常用正则表达式来进行,对于长篇累牍的日志,编写正则表达式确实是个技术+体力工作。 简单讲,海量的日志数据分为2种:

  • 预定义好的JSON

    这种日志相对比较容易解析,当然很少用到正则(鼓掌~)

  • 写成API返回形式的日志,常用: , ‘ , “ , & , - 等字符连接,有时还会出现混合的情况,这种常用正则表达式来解析(终于意识到规范的重要性……)

下图列出了Python支持的正则表达式元字符和语法: pyre

表中的元字符可以满足我们几乎所有的匹配需求(除了变态的乱码可以不考虑)。

今天遇到的问题是,在多个特殊字符之间,如何形成可选的(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,具体的请注意斜体部分的字符,使用 [^\&]* 代替我们常用.* ,这也是匹配的重点所在。 好了,今天就说这么多,改天继续。