2012-04-25 14 views
0

私は、次のコードを持っている:私はエラーを取得していますelif re.match('(',self.cmds[self.counter]):アンバランス括弧パイソン

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 

と、このライン上を。

私は間違っていますか?

+1

.. –

+0

なぜ格下げ – Itzik984

+0

?エラーに関するいくつかの詳細は役に立ちました。 – Walter

答えて

8

括弧はspecial meaning in regular expressionsです。 You can escape the parenしかしあなたは本当にこの問題のために、すべての正規表現を必要としない:たぶん「(」..Worth私は推測ショット「(\\」に置き換えてみてください

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 Regexはここで過度です。 – delnan

7

括弧'('')'は、正規表現のグループ化メカニズムと範囲演算子として使用されます。あなたはバックスラッシュ(例:\のような)でそれらの(そして他の制御記号)をエスケープする必要があります。 '\('

0

正規表現の言語は、((グループの開始に使用されます)に特別な意味を与えます。リテラルの左括弧に一致させたい場合は、バックスラッシュでそれをエスケープする必要があります:elif re.match(r'\(', ...

(なぜr'...'だけではなく'...'?通常の文字列では、バックスラッシュは、制御文字とそのようなものをエスケープするために使用され、あなたが文字列に単一のバックスラッシュを得るために\\を記述する必要があります。あなたの代わりにelif re.match('\\(', ...を書くことができるようにするので。正規表現には文字列r'...'を使用する方が良いです。エラーが発生しにくいです。