python - Python 有流式正则表达式模块吗?

标签 python regex string python-3.x lazy-evaluation

我正在寻找一种方法来在Python中的(长)可迭代的“字符”上运行正则表达式。 (Python 实际上没有字符,因此它实际上是单长度字符串的可迭代。但差异相同。)

据我所知,re 模块仅允许搜索字符串(或缓冲区)。

我可以自己实现它,但这似乎有点愚蠢。

或者,我可以将可迭代对象转换为字符串并在该字符串上运行正则表达式,但这会导致(可怕的)低效。 (最坏情况的示例:re.search(".a", "".join('a' for a in range(10**8))) 峰值超过 900M RAM (私有(private)工作集)在我的(x64)机器上,并且需要大约 12 秒,即使它只需要查看可迭代中的前两个字符。)

最佳答案

据我了解,连接大量 'a' 的示例只是显示问题的极其简单的示例。换句话说,内容的构建(通常)可能比搜索本身消耗更多的时间和内存。

标准re模块的问题在于它使用扩展的正则表达式语法,并且需要回溯。

您可能对 Thomson (NFA) 的非常经典的实现感兴趣 - 请参阅 http://swtch.com/~rsc/regexp/regexp1.html用于解释以及与实现扩展语法的库的性能比较。

看来 re2 项目对您有用。应该有 Python 端口 - 请参阅 Is it possible to use re2 from Python?但是,我不知道它是否支持流式传输,以及是否存在适用于 Python 的流式正则表达式引擎。

要了解汤姆森的想法,您还可以尝试在线 visualization of the Regular Expression to NFA .

关于python - Python 有流式正则表达式模块吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23654867/

相关文章:

Python json - 编辑 .json 文件

r - 在这个 gsub 示例中我做错了什么?

string - 如何将变量的RGB值更改为SASS中的字符串?

python - 如何将字符串 ('"12,48 8"' ) 转换为在 pandas 数据框中 float ?

c - 如何使用 2 个分隔符剪切字符串

python - 使用正则表达式从字符串中提取数字

python - 在 Python 中打印列表的非递归方式

python - google appengine, pycharm, python virtualenv 无法访问lib

php regex 如何删除重复的字符串

regex - 字符串提取 : Understanding weird output