不平衡的括号python

时间:2012-04-25 14:55:14

标签: python regex

我有以下代码:

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]):

我收到了错误。

我做错了什么?

3 个答案:

答案 0 :(得分:9)

括号有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

答案 1 :(得分:8)

括号'('')'用作regexp中的分组机制和范围运算符。你必须通过反斜杠转义它们(和任何其他控制符号),例如'\('

答案 2 :(得分:0)

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

(为什么r'...'而不仅仅是'...'?因为在普通字符串中,反斜杠也用于转义控制字符等,你需要编写\\来获得单个反斜杠因此你可以改为编写elif re.match('\\(', ...。最好养成使用r'...'字符串表示正则表达式的习惯 - 它不易出错。)