有没有可能缓存正则表达式?

我在这样的函数中有一些代码:
s = re.sub(r'\ n','\ n'+空格,s)
s = re.sub(r'^',空格,s)
s = re.sub(r' *\ n','\ n',s)
s = re.sub(r' *$','',s)
s = re.sub(r'\ n*$',',',s)
是否有可能将它们缓存在某个地方,并保存
如果我不这样
是否想在每个功能调用上重新编译它们?
很多tia!
标记
- -
马克·哈里森
皮克斯动画工作室

# 回答1


s = re.sub(r'\ n','\ n'+空格,s)
...
明确比隐式更好
...
听起来您想要的是使用Compile()调用来编译
一次,然后使用结果对象:
re1 = re.compile(r'\ n')
re2 = re.compile(r'^')
...
s = re1.sub('\ n' +空格,s)
s = re2.sub(空格,s)
...
编译()应完成一次(外部循环,可能在
模块级别,例如,在某种程度上是常数),然后您可以
使用所得的对象没有编译的开销.
-tkc
# 回答2


代表蒂姆·蔡斯(Tim Chase)
是的.我会走得更远,建议正则表达式是
最好在可能的情况下避免使用更简单的事情.那将使
代码更容易调试,并且可能更快.
几个例子:
垃圾邮件
垃圾邮件
垃圾邮件"""
垃圾邮件垃圾邮件
垃圾邮件
垃圾邮件
垃圾邮件
垃圾邮件垃圾邮件垃圾邮件垃圾邮件垃圾邮件垃圾邮件
垃圾邮件
垃圾邮件
垃圾邮件
问候,
Ryan Ginstrom
# 回答3


新闻:bu ****************@nlpi061.nbdc.sbc.com ...
|我在这样的函数中有一些代码:
|
| s = re.sub(r'\ n','\ n'+空格,s)
| s = re.sub(r'^',空格,s)
| s = re.sub(r' *\ n','\ n',s)
| s = re.sub(r' *$','',s)
| s = re.sub(r'\ n*$',',',s)
|
|是否有可能将它们缓存在某个地方,并保存
|如果我不这样
|是否想在每个功能调用上重新编译它们?
我上次看了几个版本之前,RE进行了缓存.
不知道是否仍然正确.我不认为不是规格的一部分.
tjr
# 回答4


2008年3月10日星期一,MH写道:
在交互式解释器中,键入" help(re)" [enter].一两页
下降,您会看到:
清除()
清除正则表达式缓存
并查看源代码,我看到了许多电话_compile()
从:
def _compile(*键):
#内部:编译模式
cachekey =(type(键[0]),) +键
p = _cache.get(cachekey)
如果p不是没有:
返回p
因此,是的,RE模块缓存是正则表达式.
话虽如此,您给出的五个示例中至少有四个是
很好的例子说明了您何时不应该使用Regexes.
re.sub(r'\ n','\ n'+空格,s)
更好地写为s.replace('\ n','\ n'+空格).不相信我吗?
看一下这个:
...."导入re;从__ -main __导入,空格").timeit()
7.4031901359558105
...."导入re;从__ -main __导入,空格").timeit()
1.6208670139312744
正则正则比简单的弦替换速度差差不多五倍.
相似地:
re.sub(r'^',空格,s)
更好地写成空间 +S,快了近11倍.
还:
re.sub(r' *$',',',s)
re.sub(r'\ n*$','',s)
只是慢速编写s.rstrip('')和s.rstrip('\ n')的方式.
- -
史蒂文
# 回答5


在3月10日,上午11:42,M ...@pixar.com写道:
是的,他们将被缓存.但是请自己帮个忙,看看
字符串方法.
例如.
.... s = re.sub(r'\ n','\ n'+空格,s)
.... s = re.sub(r'^',空格,s)
.... s = re.sub(r' *\ n','\ n',s)
.... s = re.sub(r' *$','',s)
.... s = re.sub(r'\ n*$',',',s)
....返回s
...
....返回'\ n'.join(spaces + x.rstrip()如果x.rstrip()else''
x in s.splitlines())
...
['foo \ n bar \ n zot','foo \ n bar \ n zot','foo \ n \ n
zot']]
['foo \ n bar \ n zot','foo \ n bar \ n zot','foo \ n \ n
zot']]
# 回答6


John Machin 伟大的.
漂亮...谢谢!
- -
马克·哈里森
皮克斯动画工作室
# 回答7


在3月10日,下午3:42,John Machin Baroquely:
更好的:
....返回'\ n'.join((spaces + x).rstrip()x in
s.splitlines())
# 回答8


在3月10日,3:39*AM,Steven d'Aprano cybersource.com.auwrote:
[...]
..."导入re;从__ -main __导入,空格").timeit()
7.4031901359558105 >>计时器("
..."导入re;从__ -main __导入,空格").timeit()
1.6208670139312744
正则正则比简单的弦替换速度差差不多五倍.
我同意第二版更好,但是大多数时候
首先是花费编译式式言论,因此比较不是
真的很公平:
1.7726190090179443
0.76739501953125
4.3669700622558594
Regexps的速度仍然慢了两倍.
- -
Arnaud

标签: python

添加新评论