【问题标题】:How can I debug a regular expression in Python?如何在 Python 中调试正则表达式?
【发布时间】:2009-03-03 13:13:45
【问题描述】:

有没有办法在 Python 中调试正则表达式?而且我指的不是尝试和尝试直到他们工作的过程:)

下面是如何在 Perl 中调试正则表达式:


use re 'debug';

my $str = "GET http://some-site.com HTTP/1.1";
if($str =~/get\s+(\S+)/i) {
    print "MATCH:$1\n";
}

上面的代码在运行时会在我的计算机上产生以下输出:


Compiling REx "get\s+(\S+)"
Final program:
   1: EXACTF  (3)
   3: PLUS (5)
   4:   SPACE (0)
   5: OPEN1 (7)
   7:   PLUS (9)
   8:     NSPACE (0)
   9: CLOSE1 (11)
  11: END (0)
stclass EXACTF  minlen 5
Matching REx "get\s+(\S+)" against "GET http://some-site.com HTTP/1.1"
Matching stclass EXACTF  against "GET http://some-site.com HTTP/1.1" (33 chars)
   0           |  1:EXACTF (3)
   3        |  3:PLUS(5)
                                  SPACE can match 1 times out of 2147483647...
   4       |  5:  OPEN1(7)
   4       |  7:  PLUS(9)
                                    NSPACE can match 20 times out of 2147483647...
  24       |  9:    CLOSE1(11)
  24       | 11:    END(0)
Match successful!
MATCH:http://some-site.com
Freeing REx: "get\s+(\S+)"

【问题讨论】:

  • 说真的:给 SO 你的正则表达式 + 样本数据?
  • 没有示例代码,我们只能猜测您的问题是什么。
  • 我现在没有正则表达式问题。我只想知道如何调试。
  • 也许上面的 cmets 暗示的是“要调试 python 正则表达式,请将您的 SO 发布到 stackoverflow.com,这样可怜的灵魂在您提供帮助之前就已经走了”
  • Perl 有更强大的工具 Regexp::Debugger - youtu.be/zcSFIUiMgAs?t=158

标签: python regex debugging


【解决方案1】:
>>> p = re.compile('.*', re.DEBUG) max_repeat 0 65535 any None >>>

regex '|' operator vs separate runs for each sub-expression

【讨论】:

  • 这只是答案的一半,它显示了正则表达式的编译结果,但没有显示它是如何针对给定字符串执行的。如果有人知道另一半,请分享!
  • 看起来re.search('look for: ".*"', 'look for: "this"', re.DEBUG) 提供了更多信息。
【解决方案2】:

https://www.debuggex.com 也不错。它是一个在线 Python(以及其他几种语言)调试器,它对匹配和不匹配的内容进行了非常简洁的可视化。如果您需要快速起草正则表达式,这是一个很好的资源。

【讨论】:

    【解决方案3】:

    您为什么不使用一些正则表达式工具(我通常使用Regulator)并在那里测试正则表达式,当您满意时,只需将其复制/粘贴到您的代码中。

    【讨论】:

    • 因为使用正则表达式工具不会告诉我为什么我的正则表达式不起作用。
    • @Geo - “不工作”到底是什么意思。根本不工作,不匹配你想要匹配的东西还是......?
    • 冒着说明显而易见的风险,正则表达式工具无法告诉您为什么它没有为您提供正确的匹配。正则表达式将完全按照您所说的去做,任何工具所能做的最好的事情就是引导您完成,以便您自己找出哪一点是错误的。
    • @Noldorin - 在这种情况下,我会推荐一本书,O'Reilly 的“Learning ...”,非常适合这类东西。
    • @Idigas:不太清楚你的意思。 O'Reilly 有一本“掌握正则表达式”一书……您是否建议 OP 阅读此书以更好地理解 RegEx?
    【解决方案4】:

    不确定直接在 Python 中做这样的事情,但我绝对可以建议使用 RegEx 编辑器工具。无论如何,这可能是你最好的选择。就个人而言,我使用过The Regulator 并发现它非常有帮助。其他一些列在this SO thread

    【讨论】:

      【解决方案5】:

      与已经提到的类似,还有Regexbuddy

      【讨论】:

        【解决方案6】:

        我经常使用RegexPal 进行快速检查(一个在线正则表达式原型器)。它列出了许多常见的表达方式以及一个简单的表达方式。当您没有专用工具并且只需要一种快速的方法来计算出一个简单的正则表达式时非常方便。

        【讨论】:

          【解决方案7】:

          RegexBuddy 具有其他工具所没有的内置debugger,它向您显示成功和失败匹配尝试的整个匹配过程。其他工具只显示最终结果(RegexBuddy 也可以显示)。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-10-21
            • 2015-12-19
            • 2011-02-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-07-29
            相关资源
            最近更新 更多