【问题标题】:Capturing python re.compile() with re.DEBUG flag terminal output使用 re.DEBUG 标志终端输出捕获 python re.compile()
【发布时间】:2021-09-30 09:18:08
【问题描述】:

当使用带有re.DEBUG 标志的re.compile() 时,解析信息会打印到控制台。
例如,运行 pattern = re.compile(r'[ab]+', re.DEBUG) 会在控制台中打印以下输出:

MAX_REPEAT 1 MAXREPEAT
  IN
    LITERAL 97
    LITERAL 98

我想得到这个解析树并将它保存在一个变量中以便我可以处理它,但是我根本找不到这个输出的保存位置。

注意:我可以通过将编译作为子进程运行并使用捕获输出来获取输出

proc = subprocess.Popen(["python", "-c", "import re; re.compile(r'[ab]+', re.DEBUG)"], stdout=subprocess.PIPE)
out = proc.communicate()[0]

但感觉有点矫枉过正。

有没有更简单的获取调试输出的方法?

【问题讨论】:

    标签: python debugging terminal output re


    【解决方案1】:

    在做了一些挖掘和反转 re lib 代码之后,找到了一种相当简单的方法来获取这些数据。 re库使用sre_parse库,可以用

    p = sre_parse.parse('[ab]+')
    

    并使用

    检索解析数据
    p.data
    

    并以树格式打印它

    p.dump()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-27
      • 1970-01-01
      • 1970-01-01
      • 2018-05-27
      • 2014-05-18
      • 2014-04-18
      相关资源
      最近更新 更多