一尘不染

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

python

假设您要在管道上执行正则表达式搜索并提取,但是该模式可能会跨越多行,该怎么做?也许正则表达式库适用于流?

我希望使用Python库完成这项工作吗?但是任何解决方案都可以,当然不是库,而是cmd行工具。

顺便说一句,我知道如何解决我当前的问题,只是寻求一个通用的解决方案。

如果不存在此类库,那么在常规数学算法永远不需要向后扫描的情况下,为什么常规库不能与流一起使用。


阅读 184

收藏
2021-01-20

共1个答案

一尘不染

如果您寻求一般解决方案,则算法将需要如下所示:

  1. 将流的一部分读取到缓冲区中。
  2. 在缓冲区中搜索正则表达式
  3. 如果模式匹配,则对匹配项做任何想做的事情,丢弃缓冲区的开头直到match.end()第2步。
  4. 如果模式不匹配,请使用流中的更多数据扩展缓冲区

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

如果您了解更多有关正则表达式的信息,则可能还有其他情况可以丢弃部分缓冲区。

2021-01-20