这些标志在python 3的re库中究竟做了什么?

时间:2017-07-27 22:10:30

标签: python regex python-3.x

我无法找到有关re库中某些操作的确切标志的解释。

https://docs.python.org/3.6/library/re.html

例如,我有以下一些python代码:

nestedPar = re.findall(r"\([^\(\)]*\)", s, 0)

但我不确定当我将0更改为1时到底发生了什么,因为它会导致崩溃。

任何人都可以解释这个标志的确切含义吗?

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.Tre.TEMPLATE),其标志为1,如上所示,是实验性的,很多事情都可能出错有了它,直接来自消息来源:

# sre extensions (experimental, don't rely on these)
T = TEMPLATE = sre_compile.SRE_FLAG_TEMPLATE # disable backtracking

因此您遇到了模板模式的问题。无论哪种方式幸福生活,都不要自己设置标志:)