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 に答える