小编Ada*_*dam的帖子

有没有办法在python中真正挑选编译的正则表达式?

我有一个包含300多个正则表达式的python控制台应用程序.每个版本都修复了正则表达式集.当用户运行应用程序时,整个正则表达式集将应用于从一次(非常短的工作)到数千次(长时间工作)的任何地方.

我想通过预先编译正则表达式,将编译的正则表达式pickle到文件,然后在运行应用程序时加载该文件来加快较短的作业.

python re模块是高效的,正则表达式编译开销对于长作业来说是完全可以接受的.然而,对于短期工作,它占整个运行时间的很大一部分.一些用户希望运行许多小作业以适应他们现有的工作流程.编译正则表达式大约需要80毫秒.除正则表达式编译外,短作业可能需要20ms-100ms.因此,对于短期工作,开销可以是100%或更多.这是在Windows和Linux下的Python27.

必须使用DOTALL标志应用正则表达式,因此需要在使用前进行编译.在这种情况下,大型编译缓存显然无济于事.正如一些人已经指出的那样,序列化编译的正则表达式的默认方法实际上并没有做太多.

re和sre模块将模式编译成一个小的自定义语言,具有自己的操作码和一些辅助数据结构(例如,用于表达式中使用的字符集).re.py中的pickle函数可以轻松实现.它是:

def _pickle(p):
    return _compile, (p.pattern, p.flags)

copy_reg.pickle(_pattern_type, _pickle, _compile)
Run Code Online (Sandbox Code Playgroud)

我认为这个问题的一个很好的解决方案是更新re.py中_pickle的定义,它实际上是对已编译的模式对象进行了腌制.不幸的是,这超出了我的python技能.不过,我打赌,这里有人知道该怎么做.

我意识到我不是第一个提出这个问题的人 - 但也许你可以成为第一个对它做出准确而有用的回应的人!

非常感谢您的建议.

python regex pickle

18
推荐指数
2
解决办法
2314
查看次数

标签 统计

pickle ×1

python ×1

regex ×1