2

我有以下代码:

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

我收到一个错误。

我究竟做错了什么?

4

3 回答 3

9

括号在正则表达式中有特殊含义你可以逃避括号,但你真的不需要正则表达式来解决这个问题

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
于 2012-04-25T14:58:15.037 回答
8

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

于 2012-04-25T14:57:23.493 回答
1

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

(为什么r'...'而不仅仅是'...'?因为在普通字符串中,反斜杠也用于转义控制字符等,并且您需要\\在字符串中写入单个反斜杠。所以您可以改为写elif re.match('\\(', ...。最好养成习惯对正则表达式使用r'...'字符串——这样更不容易出错。)

于 2012-04-25T14:57:43.203 回答