如何在Python中调试正则表达式?

时间:2009-03-03 13:13:45

标签: python regex debugging

有没有办法在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+)"

7 个答案:

答案 0 :(得分:18)


>>> p = re.compile('.*', re.DEBUG)
max_repeat 0 65535
  any None
>>>                         

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

答案 1 :(得分:3)

https://www.debuggex.com也很不错。它是一个在线Python(以及几种语言)调试器,它具有非常简洁的可视化,可以显示哪些内容与哪些内容不匹配。如果你需要快速起草一个正则表达式,这是一个非常好的资源。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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