2012-04-25 127 views
0

我有以下代码:不平衡括号蟒蛇

def commandType(self): 
    import re 
    print self.cmds[self.counter] 
    if re.match("@",self.cmds[self.counter]): 
     return Parser.A_COMMAND 

    elif re.match('(',self.cmds[self.counter]): 
     return Parser.L_COMMAND 

    else: 
     return Parser.C_COMMAND 

,并在这条线:elif re.match('(',self.cmds[self.counter]):

我发现了一个错误。

我在做什么错?

+1

也许尝试“(”与“\\(” ..Worth更换镜头我想.. – 2012-04-25 14:57:31

+0

为什么降级 – Itzik984 2012-04-25 15:01:58

+0

有关错误的一些细节会很有用。 – Walter 2012-04-25 15:05:18

回答

8

括号中有special meaning in regular expressionsYou can escape the paren你真的不需要一个正则表达式在所有的这个问题

def commandType(self): 
    print self.cmds[self.counter] 
    if '@' in self.cmds[self.counter]): 
     return Parser.A_COMMAND 

    elif '(' in self.cmds[self.counter]: 
     return Parser.L_COMMAND 

    else: 
     return Parser.C_COMMAND 
+2

+1正则表达式在这里是过度的。 – delnan 2012-04-25 14:59:00

7

括号'('')'被用作正则表达式中的分组机制和范围运算符。你必须通过反斜线(例如,任何其他控制符号)将它们转义出来。 '\('

0

正则表达式的语言给((它用于启动组)的特殊含义。如果要匹配文字左括号,则需要使用反斜杠进行转义:elif re.match(r'\(', ...

(为什么r'...',而不是仅仅'...'?因为在普通字符串,反斜杠也被用来避开控制字符,诸如此类,你需要写\\获得一个反斜杠的字符串。所以你可以代替写elif re.match('\\(', ...。最好养成用正则表达式使用r'...'字符串的习惯 - 它不太容易出错。)