Python正则表达式解析流

发布于 2021-01-29 17:39:48

有什么方法可以在python中的流上使用正则表达式匹配吗?喜欢

reg = re.compile(r'\w+')
reg.match(StringIO.StringIO('aa aaa aa'))

而且我不想通过获取整个字符串的值来做到这一点。我想知道是否有任何方法可以在srtream上匹配正则表达式(即时)。

关注者
0
被浏览
137
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    我有同样的问题。首先想到的是实现一个LazyString类,该类的作用类似于字符串,但仅从流中读取当前所需的数据(我通过重新实现__getitem____iter__提取和缓冲字符直到访问的最高位置来完成此操作……)。

    这没有解决(我从中得到了“ TypeError:期望的字符串或缓冲区” re.match),因此我re对标准库中模块的实现进行了一些研究。

    不幸的是,似乎无法在流上使用正则表达式。模块的核心是用C实现的,该实现期望整个输入立即存储在内存中(我猜主要是出于性能方面的考虑)。似乎没有简单的方法可以解决此问题。

    我也看过PYL(Python LEX /
    YACC),但是他们的词法分析器在re内部使用,因此无法解决问题。

    一种可能是使用支持Python后端的ANTLR。它使用纯python代码构造词法分析器,并且似乎能够对输入流进行操作。因为对我来说问题并不那么重要(我不希望我的投入很大),所以我可能不会对此做进一步的研究,但这可能值得一看。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看