Python:模式检测和规则生成

Python:模式检测和规则生成,python,regex,pattern-matching,yacc,rule-engine,Python,Regex,Pattern Matching,Yacc,Rule Engine,我需要一个模式解释和规则生成系统。基本上,它的工作原理是通过文本进行解析,并从中解释模式,基于这些解释,我需要输出一组规则。这里有一个例子。假设我有一个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

我需要一个模式解释和规则生成系统。基本上,它的工作原理是通过文本进行解析,并从中解释模式,基于这些解释,我需要输出一组规则。这里有一个例子。假设我有一个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_标记或STRING:id

对于通过文本(本例中为标题)进行解析,我必须告诉解析器需要提取“下载”之后的内容。所以基本上有一个规则集的定义,这个解析器将使用它来解析文本,并最终输出最终的规则


现在的问题是,python中是否有任何这样的模式匹配、检测和生成模块可以帮助我实现这一点?这有点像编译器的解析器部分。我想在自己动手做之前先问一下。有什么帮助吗?

我想这已经在以下章节中得到了回答:


我可以保证,使用pyparsing模块,您所需要的很容易。

您最好自己做这件事。这不是很多工作

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

**编辑** 我认为没有图书馆可以这样做。如果我理解正确,您希望指定一组如下规则:

下载后提取

这将输出如下文本:

req-hdr-pattern: "^GET[ ].*/api/1\\.0/download/{STRING:auth_token}/{STRING:id}[].*website\\.com"
为此,您必须创建一个解析器来解析您的规则。根据规则语法的复杂性,可以使用pyparsing、正则表达式或手动执行。我的经验法则是,若您的语法是递归的(如html),那个么使用pyparsing是有意义的,否则就不值得了

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


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

如果这不是您想要的,很抱歉,但我有点赶时间。 Python的re模块文档。
它的文档不足,但可能有助于使某些东西可行。

当然比自己标记东西要容易,但可能无法提供您想要的灵活性。

使用pyparsing进行此操作就像试图用火箭筒射击蚊虫。不,关键是我不必编写正则表达式。这样我的解决方案就没有优势了。我可以直接手动编写规则。我这样理解你正确吗?你想要一个程序解析一些文本,从中提取模式,然后将这些模式作为规则输出?是的,但是为了提取这些模式,我应该只给出确切的模式及其上下文。没有正则表达式。称之为解析规则。解析规则看起来像“下载”之后的摘录。你明白我的意思吗?不,你上面提到的规则是作为解析器的输出。文本与此不匹配。解析器应该解析文本,然后输出这个规则。恐怕我不明白你想要什么。你说你应该“只给出确切的模式及其背景”。你这是什么意思?给予意味着一些投入。你能举一个输入模式的例子吗?