0

我需要一个模式解释和规则生成系统。基本上它的工作原理是它应该解析文本并从中解释模式,并且基于这些解释,我需要输出一组规则。这是一个例子。假设我有一个看起来像的 HTTP 标头

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 中有没有这样的模块可用于模式匹配、检测、生成可以帮助我解决这个问题?这有点像编译器的解析器部分。在深入尝试自己制作一个之前,我想问一下。有什么帮助吗?

4

3 回答 3

1

我认为这已经在以下方面得到了回答:

解析器生成

Python解析器模块教程

我可以保证你想要的很容易使用 pyparsing 模块。

于 2012-09-14T13:32:26.180 回答
0

你最好自己做这个。这不是很多工作。

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

** 编辑 ** 我认为没有图书馆可以做到这一点。如果我对您的理解正确,您想指定一组像这样的规则:

下载后提取

这将输出如下文本:

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

为此,您必须创建一个解析器来解析您的规则。根据规则语法的复杂性,您可以使用 pyparsing、使用正则表达式或手动操作。我的经验法则是,如果你的语法是递归的(比如 html),那么使用 pyparsing 是有意义的,否则就不值得了。

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

使用这些正则表达式,您将匹配从输入文本中提取数据。

于 2012-09-14T13:37:24.993 回答
0

抱歉,如果这不是您想要的,但我有点赶时间。Python 的 re 模块文档包含有关编写标记器的部分
它的文档不足,但可能会帮助您使某些东西可行。
当然比自己标记事物更容易,尽管可能无法提供您所追求的灵活性。

于 2012-09-14T14:12:31.677 回答