我正在研究一个叫做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