2012-09-14 36 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模塊文檔。
這是沒有記錄,但可能會幫助你使一些可行的。
肯定比自己標記事物更容易,但可能無法提供您似乎在追求的靈活性。