要强调的是,我不想“使用正则表达式进行解析”——我想“将正则表达式解析为符号树”。 (搜索只找到了前者……)
我的用例:为了加快对数据库的正则表达式搜索,我想解析像 (foo|bar)baz+(bat)*
这样的正则表达式并提取所有必须的子字符串出现在比赛中。 (在这种情况下,它只是 baz
,因为 foo/bar 是交替,而 bat 可以出现 0 次。)
为此,我需要对正则表达式运算符/语义有所了解。 re.DEBUG
最接近:
In [7]: re.compile('(foo|bar)baz+(bat)', re.DEBUG)
subpattern 1
branch
literal 102
literal 111
literal 111
or
literal 98
literal 97
literal 114
literal 98
literal 97
max_repeat 1 4294967295
literal 122
subpattern 2
literal 98
literal 97
literal 116
但是,它只是打印出来,据我所知,c 实现并没有在之后保留结构。关于如何在不编写我的所有者解析器的情况下解析它的任何想法?
最佳答案
你也许可以只使用这个:
import sre_parse
sre_parse.parse(r'(\d+)foo(.*)')
关于将正则表达式解析为 AST 的 Python 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34523326/