将正则表达式解析为 AST 的 Python 库?

标签 python regex parsing

要强调的是,我不想“使用正则表达式进行解析”——我想“将正则表达式解析为符号树”。 (搜索只找到了前者……)

我的用例:为了加快对数据库的正则表达式搜索,我想解析像 (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/

相关文章:

python - 为什么这个正则表达式表现得贪婪,而我告诉它不要贪婪?

parsing - 匹配PARSE中的自定义token

python - Web.py session 数据在生产中消失

python - 是什么导致 Django 在 6 次中只有 3 次使用 500.html?

javascript - 如何使用正则表达式匹配单个单词和单词组合?

javascript - 如何在javascript中显示image/pdf的二进制内容?

javascript - 在 Quill 中,如何解析增量并替换其部分内容

Python SQL如何查找其他表中的不匹配项?

python - 使用 Python Printf 将整数格式化为逗号

regex - 从 RedHat Linux 7 中的文件输出特定字符串 - 可能是正则表达式