2012-09-14 33 views
0

我需要一个模式解释和规则生成系统。基本上它的工作原理是它应该通过文本进行解析并从中解释模式,并且基于这些相互作用,我需要输出一组规则。这是一个例子。可以说我有一个HTTP头,它看起来像Python:模式检测和规则生成

GET https://website.com/api/1.0/download/8hqcdzt9oaq8llapjai1bpp2q27p14ah/2139379149 HTTP/1.1 
Host: website.com 
User-Agent: net.me.me/2.7.1;OS/iOS-5.0.1;Apple/iPad 2 (GSM) 
Accept: */* 
Accept-Language: en-us 
Accept-Encoding: gzip, deflate 

解析器将通过这个输出

req-hdr-pattern: "^GET[ ].*/api/1\\.0/download/{STRING:auth_token}/{STRING:id}[].*website\\.com" 

上述规则包含正则表达式的修改版本上运行。每个变量,例如STRING:auth_token或STRING:id都将被提取。

为了解析文本(本例中为头文件),我将不得不告诉解析器它需要提取“下载”后出现的任何内容。所以基本上有一组规则的定义,这个解析器将用来解析文本并最终输出最终规则。

现在的问题是,是否有任何这样的模块可用于Python模式匹配,检测,生成,可以帮助我呢?这有点像编译器的解析器部分。在深入尝试自己创造一个之前,我想问一下。任何帮助?

回答

0

你最好自己做。这不是什么工作。

正如您所说,您必须将正则表达式定义为规则。然后,程序会找到匹配的正则表达式并将匹配转换为输出规则。

**编辑** 我不认为有一个图书馆来做到这一点。如果我理解正确的话,你要指定一组像这样的规则:

req-hdr-pattern: "^GET[ ].*/api/1\\.0/download/{STRING:auth_token}/{STRING:id}[].*website\\.com" 

为此,你会:

EXTRACT下载

,这将输出一个像这样的文本之后必须创建一个解析器来解析你的规则。根据规则语法的复杂性,您可以使用pyparsing,使用正则表达式或手动完成。我的拇指规则是,如果你的语法是递归的(即像html),那么使用pyparsing是有意义的,否则它是不值得的。

从这些解析的规则中,您的程序将不得不创建新的正则表达式来匹配输入文本。基本上,您的程序会将规则转换为正则表达式。

使用这些匹配的正则表达式可以提取输入文本中的数据。

+0

不,重点是我不应该写正则表达式。那么我的解决方案没有什么优势。我可以直接手动编写规则。 – auny

+0

我是否像这样理解正确?你想要一个程序解析一些文本,从中提取模式,然后输出这些模式作为规则? –

+0

是的,但为了提取这些模式,我应该只给出确切的模式及其上下文。没有正则表达式。将此称为解析规则。解析规则看起来像“下载”后的提取。你明白我的意思吗? – auny

0

对不起,如果这不是你正在寻找的,但我有点匆忙的时间。 Python模块contains a section on writing a tokenizer的re模块文档。
这是没有记录,但可能会帮助你使一些可行的。
肯定比自己标记事物更容易,但可能无法提供您似乎在追求的灵活性。