2015-02-05 90 views
0

我想从以下命令输出中匹配所有“所有ZERO”。如何准确使用python正则表达式匹配“0 0 0”?

router-7F2C13#show app stats gmail on TEST/switch1234-15E8CC 
-------------------------------------------------------------------------------- 
    APPLICATION   BYTES_IN   BYTES_OUT   NUM_FLOWS 
-------------------------------------------------------------------------------- 
    gmail    0     0     0 
-------------------------------------------------------------------------------- 
router-7F2C13# 

我需要满足以下要求:

我用下面的代码尝试:

x="""router-7F2C13#show app stats gmail on TEST/switch1234-15E8CC 
-------------------------------------------------------------------------------- 
    APPLICATION   BYTES_IN   BYTES_OUT   NUM_FLOWS 
-------------------------------------------------------------------------------- 
    gmail    0     0     0 
-------------------------------------------------------------------------------- 
router-7F2C13#""" 

def pass_fail_criteria(x): 
    if int(re.findall(r"NUM_FLOWS\n-+[\s\S]*?(\d+)\s*-+"): 
     print "FAIL" 
    else: 
     print "PASS" 

print pass_fail_criteria(x)  

但它会引发以下错误:

C:\Users\test\Desktop>python test_regexp.py 
    File "test_regexp.py", line 17 
    if int(re.findall(r"NUM_FLOWS\n-+[\s\S]*?(\d+)\s*-+"): 
                 ^
SyntaxError: invalid syntax 

C:\Users\test\Desktop> 

谁能帮我解决这个问题?

是否有可能匹配所有零与确切的空格?

+3

有两个问题,在这里...答案第一个是...关闭**支架! – 2015-02-05 16:34:53

回答

1

您可以尝试像

\s*\w+\s+(\d+)\s+(\d+)\s+(\d+) 

正则表达式这似乎符合

gmail 0 0 0 

的替代(按您的要求)是相匹配的文字0的。只是0替换数字匹配:

\s*\w+\s+(0)\s+(0)\s+(0) 

注意,(括号内)是分组,这取决于你如何将使用正则表达式可能没有必要。如果你只是测试一场比赛,你可以放弃它们。

那么你或许应该写一个函数来保证比赛都为0

你可以看看debuggex

Regular expression visualization

Debuggex Demo

+0

感谢您的回答。是否可以匹配所有确切的零,而不使用函数。我的基本想法是在Robot Framework中使用“不匹配正则表达式”关键字。 URL“http://robotframework.googlecode.com/hg/doc/libraries/BuiltIn.html?r=2.6.1#Should%20Match%20Regexp”。 – rcubefather 2015-02-05 16:50:21

+0

\ s + \ w + \ s +(0)\ s +(0)\ s +(0)...我可以使用这个吗?它有效吗? – rcubefather 2015-02-05 16:55:02

+0

绝对如此。按照debuggex链接,复制粘贴一些代码,并处理匹配。 – 2015-02-05 16:56:43

相关问题