是否可以定义一个全局标志,以便Python re.compile()自动设置它?例如,我想在re.DOTALL我的所有RegExp中使用标志 - 例如 - 一个类?
起初听起来可能很奇怪,但由于它是由YAPPS生成的,所以我并没有真正掌控这部分代码.我只给YAPPS一个包含RegExp的字符串并调用它re.compile().唉,我需要在re.DOTALL模式中使用它.
快速修复是编辑生成的解析器并添加适当的选项.但我仍然希望有另一种更自动化的方法来做到这一点.
编辑:Python允许您使用(?...)构造设置标志,所以在我的情况下,re.DOTALL是(?s).虽然很有用,但它不适用于整个类或文件.
所以我的问题仍然存在.
Kat*_*iel 10
是的,您可以将其更改为全局re.DOTALL.但你不应该.全局设置在最好的时候是一个坏主意 - 这可能导致由同一个Python实例运行的任何Python代码中断.
所以,不要这样做:
你可以改变它的方法是使用Python解释器为每个实例缓存模块的事实,这样如果其他人导入相同的模块,他们就会得到你也有权访问的对象.所以你可以重新绑定re.compile到通过的代理函数re.DOTALL.
import re
re.my_compile = re.compile
re.compile = lambda pattern, flags: re.my_compile(pattern, flags | re.DOTALL)
Run Code Online (Sandbox Code Playgroud)
而这种变化将发生在其他所有人身上.
您甚至可以在上下文管理器中将其打包,如下所示:
from contextlib import contextmanager
@contextmanager
def flag_regexen(flag):
import re
re.my_compile = re.compile
re.compile = lambda pattern, flags: re.my_compile(pattern, flags | flag)
yield
re.compile = re.my_compile
Run Code Online (Sandbox Code Playgroud)
然后
with flag_regexen(re.DOTALL):
<do stuff with all regexes DOTALLed>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6315 次 |
| 最近记录: |