2012-04-25 162 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'...'字符串的習慣 - 它不太容易出錯。)