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