re.DEBUG 标志的含义是什么?

Dan*_*ejo 16 python regex

通过该re.DEBUG标志可以了解 Python 中正则表达式模式的内部工作原理,例如:

import re

re.compile(r"(a(?:b)){1,3}(c)", re.DEBUG)
Run Code Online (Sandbox Code Playgroud)

返回:

MAX_REPEAT 1 3
  SUBPATTERN 1 0 0
    LITERAL 97
    LITERAL 98
SUBPATTERN 2 0 0
  LITERAL 99

 0. INFO 4 0b0 3 7 (to 5)
 5: REPEAT 11 1 3 (to 17)
 9.   MARK 0
11.   LITERAL 0x61 ('a')
13.   LITERAL 0x62 ('b')
15.   MARK 1
17: MAX_UNTIL
18. MARK 2
20. LITERAL 0x63 ('c')
22. MARK 3
24. SUCCESS
Run Code Online (Sandbox Code Playgroud)

在哪里可以找到操作码(SUBPATTERN、MAX_REPEAT 等)的含义?其中一些是不言自明的,但整体目的尚不清楚。是什么1 0 0意思SUBPATTERN 1 0 0

我尝试过的一些事情:

注意:我知道这可能不太适合 StackOverflow 问题,但我已经用 MRE 写了一个明确的问题,并为解决当前问题做出了努力。此外,我认为解决这个问题也有利于其他用户。

小智 4

我想我可以回答你的大部分问题,但也许不能回答全部。所以操作码是 python 模块内部的一部分re,并且似乎并不意味着面向用户。

也就是说,

MAX_REPEAT 1 3表示模式重复 1 到 3 次。

LITERAL只是一个字符文字(例如“a”的 ascii 是 97)。

SUBPATTERN 1 0 0匹配第一个子模式(例如组),SUBPATTERN 2 0 0匹配第二个子模式等。据我所知,这里的 0 只是未使用的占位符,但这是我不是 100% 清楚的部分。

无论如何,如果您实际上正在尝试调试某些正则表达式,我建议您使用许多不错的在线正则表达式调试器之一(例如https://regex101.com/)。