我无法找到有关re库中某些操作的确切标志的解释。
https://docs.python.org/3.6/library/re.html
例如,我有以下一些python代码:
nestedPar = re.findall(r"\([^\(\)]*\)", s, 0)
但我不确定当我将0更改为1时到底发生了什么,因为它会导致崩溃。
任何人都可以解释这个标志的确切含义吗?
答案 0 :(得分:2)
第三个参数是选项位掩码,位掩码定义为(从技术上讲,这可能因版本而异):
SRE_FLAG_TEMPLATE = 1 # template mode (disable backtracking)
SRE_FLAG_IGNORECASE = 2 # case insensitive
SRE_FLAG_LOCALE = 4 # honour system locale
SRE_FLAG_MULTILINE = 8 # treat target as multiline string
SRE_FLAG_DOTALL = 16 # treat target as a single string
SRE_FLAG_UNICODE = 32 # use unicode locale
SRE_FLAG_VERBOSE = 64 # ignore whitespace and comments
SRE_FLAG_DEBUG = 128 # debugging
使用简单的按位OR(或常规+
),您可以组合多个标记(例如re.MULTILINE | re.DOTALL
)。它不应该在1
失败,但请不要直接使用数字,因为某种原因,它们会被分配到有意义的常量。
编辑 - 模板模式(re.T
或re.TEMPLATE
),其标志为1
,如上所示,是实验性的,很多事情都可能出错有了它,直接来自消息来源:
# sre extensions (experimental, don't rely on these)
T = TEMPLATE = sre_compile.SRE_FLAG_TEMPLATE # disable backtracking
因此您遇到了模板模式的问题。无论哪种方式幸福生活,都不要自己设置标志:)