I don't know about any python grok ports, but this functionality seems pretty simple to implement:
import re
types = {
'WORD': r'\w+',
'NUMBER': r'\d+',
}
def compile(pat):
return re.sub(r'%{(\w+):(\w+)}',
lambda m: "(?P<" + m.group(2) + ">" + types[m.group(1)] + ")", pat)
rr = compile("%{WORD:method} %{NUMBER:bytes} %{NUMBER:duration}")
print re.search(rr, "hello 123 456").groupdict()
source
share