Python正则表达式解析流
有什么方法可以在python中的流上使用正则表达式匹配吗?喜欢
reg = re.compile(r'\w+')
reg.match(StringIO.StringIO('aa aaa aa'))
而且我不想通过获取整个字符串的值来做到这一点。我想知道是否有任何方法可以在srtream上匹配正则表达式(即时)。
-
我有同样的问题。首先想到的是实现一个
LazyString
类,该类的作用类似于字符串,但仅从流中读取当前所需的数据(我通过重新实现__getitem__
并__iter__
提取和缓冲字符直到访问的最高位置来完成此操作……)。这没有解决(我从中得到了“ TypeError:期望的字符串或缓冲区”
re.match
),因此我re
对标准库中模块的实现进行了一些研究。不幸的是,似乎无法在流上使用正则表达式。模块的核心是用C实现的,该实现期望整个输入立即存储在内存中(我猜主要是出于性能方面的考虑)。似乎没有简单的方法可以解决此问题。
我也看过PYL(Python LEX /
YACC),但是他们的词法分析器在re
内部使用,因此无法解决问题。一种可能是使用支持Python后端的ANTLR。它使用纯python代码构造词法分析器,并且似乎能够对输入流进行操作。因为对我来说问题并不那么重要(我不希望我的投入很大),所以我可能不会对此做进一步的研究,但这可能值得一看。