【问题标题】:Unbalanced parenthesis python不平衡括号python
【发布时间】:2012-04-25 14:55:14
【问题描述】:

我有以下代码:

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

我遇到了一个错误。

我做错了什么?

【问题讨论】:

  • 也许尝试用 '\(' 替换 '(' ..值得一试我猜..
  • 一些关于错误的细节会很有用。

标签: python regex


【解决方案1】:

括号中有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】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-05
        • 2016-09-04
        • 1970-01-01
        • 2020-08-09
        • 1970-01-01
        • 1970-01-01
        • 2021-04-10
        相关资源
        最近更新 更多