grok在python 中的使用

grok 意为“通过感觉会意”

他比正则匹配更高级一些,在语法上略有不同,不过属于换汤不换药,正则熟悉的同学,grok对你来说也不会很难。

grok很多语言已经支持,python 中也有第三方库,pygrok项目地址
https://github.com/garyelephant/pygrok

安装

pip install pygrok

示例

from pygrok import Grok
text = 'gary is male, 25 years old and weighs 68.5 kilograms'
pattern = '%{WORD:name} is %{WORD:gender}, %{NUMBER:age} years old and weighs %{NUMBER:weight} kilograms'
grok = Grok(pattern)
print grok.match(text)

# {'gender': 'male', 'age': '25', 'name': 'gary', 'weight': '68.5'}

我们看到格式中{WORD:xxx},{NUMBER:xxx},这里面的NUMBER类型后面可以定义类型,例如, %{NUMBER:age:int}
那么输出的字典直接输出我们定义的类型

# {'gender': 'male', 'age': 25, 'name': 'gary', 'weight': 68.5}

常用类型

`WORD` 意思是 \b\w+\b 规则.
`NUMBER` 意思是 (?:%{BASE10NUM}) 数字
`BASE10NUM` means (?<![0-9.+-])(?>[+-]?(?:(?:[0-9]+(?:\.[0-9]+)?)|(?:\.[0-9]+)))

其他的例如 `IP`, `HOSTNAME`, `URIPATH`, `DATE`, `TIMESTAMP_ISO8601`, `COMMONAPACHELOG`..

还支持很多nginx_access ,syslog等。

参考资料:
[1].http://grokdebug.herokuapp.com/patterns

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页