any chance regular expressions are cached?
John Machin
sjmachin at lexicon.net
Mon Mar 10 00:42:49 EDT 2008
On Mar 10, 11:42 am, m... at pixar.com wrote:
> I've got a bit of code in a function like this:
>
> s=re.sub(r'\n','\n'+spaces,s)
> s=re.sub(r'^',spaces,s)
> s=re.sub(r' *\n','\n',s)
> s=re.sub(r' *$','',s)
> s=re.sub(r'\n*$','',s)
>
> Is there any chance that these will be cached somewhere, and save
> me the trouble of having to declare some global re's if I don't
> want to have them recompiled on each function invocation?
>
Yes they will be cached. But do yourself a favour and check out the
string methods.
E.g.
>>> import re
>>> def opfunc(s, spaces):
... s=re.sub(r'\n','\n'+spaces,s)
... s=re.sub(r'^',spaces,s)
... s=re.sub(r' *\n','\n',s)
... s=re.sub(r' *$','',s)
... s=re.sub(r'\n*$','',s)
... return s
...
>>> def myfunc(s, spaces):
... return '\n'.join(spaces + x.rstrip() if x.rstrip() else '' for
x in s.splitlines())
...
>>> t1 = 'foo\nbar\nzot\n'
>>> t2 = 'foo\nbar \nzot\n'
>>> t3 = 'foo\n\nzot\n'
>>> [opfunc(s, ' ') for s in (t1, t2, t3)]
[' foo\n bar\n zot', ' foo\n bar\n zot', ' foo\n\n
zot']
>>> [myfunc(s, ' ') for s in (t1, t2, t3)]
[' foo\n bar\n zot', ' foo\n bar\n zot', ' foo\n\n
zot']
>>>
More information about the Python-list
mailing list