流上的正则表达式而不是字符串?

use*_*712 6 python regex

假设您要进行正则表达式搜索并通过管道提取,但模式可能会跨越多行,如何做?也许正则表达式库适用于流?

我希望使用Python库做这个工作?但任何解决方案都可以,库当然不是cmd行工具.

顺便说一句,我知道如何解决我目前的问题,只是寻求一般的解决方案.

如果不存在这样的库,那么为什么常规库无法使用流,因为常规的mathing算法永远不需要后向扫描.

Jam*_*dge 6

如果您使用的是通用解决方案,那么您的算法需要看起来像:

  1. 将一大块流读入缓冲区.
  2. 在缓冲区中搜索正则表达式
  3. 如果模式匹配,请对匹配执行任何操作,将缓冲区的起点丢弃,match.end()然后转到步骤2.
  4. 如果模式不匹配,请使用流中的更多数据扩展缓冲区

如果没有找到匹配项,这可能最终会占用大量内存,但在一般情况下很难做得更好(考虑尝试.*x在大文件中匹配多行正则表达式,其中唯一的x是最后一个字符).

如果您对regexp有更多了解,可能还有其他情况可以丢弃部分缓冲区.