grok在python 中的使用

来源:互联网 发布:钉钉阿里云code机器人 编辑:程序博客网 时间:2024/06/05 15:24

grok 意为“通过感觉会意”

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

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

安装

pip install pygrok

示例

from pygrok import Groktext = '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

原创粉丝点击