我正在研究一個叫做pydlp的小項目。它基本上是一組正則表達式簽名,將從文件對象中提取數據。而一個檢查提取的數據是否真的很有趣的函數。將數據推入正則表達式?
此代碼是我如何執行匹配。這遠非最佳,因爲我必須一遍又一遍地讀取文件。
for signature in signatures:
match = signature.validate(signature.regex.match(fobj.read())))
if match: matches.append(match)
fobj.seek(0)
是否有執行多個正則表達式的方式相同的文件對象上的匹配,而僅讀取文件內容物一次。文件對象可以很大,所以我不能把它放在內存中。
編輯:
我想澄清一下,爲什麼我的意思是「推到數據正則表達式」。我認識到正則表達式與有限狀態機有相似之處。與其一次將整個數據傳遞給正則表達式引擎,是否有可能一次推送部分數據?
while True:
data = fobj.read(1024)
if data == "": break
for signature in signatures:
match = signature.regex.push_and_match(data)
if match: matches.append(match)
編輯2: 刪除鏈接,我刪除從GitHub項目。
只讀一次文件內容並循環簽名?這肯定比重新讀取文件更快,我不明白你爲什麼這樣做。 – nhahtdh 2015-02-12 08:02:05
數據和正則表達式的性質是什麼?它是面向行的文本數據嗎?正則表達式是以單行的文本還是更大的單位進行操作的? – FMc 2015-02-12 08:05:28
嗨@nhahtdh。我不喜歡我目前的做法。如果可以的話,我不希望讀取整個文件內容,而是將它的一部分推入正則表達式引擎,因爲它正在被讀取(n)。我一直在思考如何使用某種滑動窗口來實現這一目標的策略。但在我這樣做之前,我想看看是否有人可以提出更好的解決方案。 – 2015-02-12 08:06:32