2017-02-15 11 views
1

にマッチし、私は*=&=+=-=|=、および正規表現で^=にマッチしようとしているが、いくつかの理由については、以下のパターンは、両方の<=を受け入れますそして>=「^」の文字は、Pythonの正規表現の両方において「<' and '>」

modifyPat = re.compile('\s*[&\|\*/%\+-^]*=[^=]*') 

私はいくつかの掘削を行って、問題がパターン内^文字を含めることにより生じることを発見しました。例えば、私は以下のパターンのように^を削除し、場合、私が期待されるマッチングの挙動を得るが、当然のことながら^=に対して能力の試合を失う:ここで何が起こっているか

modifyPat = re.compile('\s*[&\|\*/%\+-]*=[^=]*') 

、とにどのような方法があります^=と一致させるために^文字を含めると、<=>=のように一致しません。

+3

'[+ - ^]'を見ると、ハイフンが最後になければならず、 '^'は先頭にしてはいけません。 –

+1

また、生の文字列を使う: 'r '...''。 – user2357112

答えて

6

セットが定義されている方法は、緯度の多くは、それ自身のメタ構文を持っています

[+-^] 

これは、それらの多くであるASCIIテーブルの+^間のすべての文字を意味し、 <および>とすべての文字が含まれます。

はそれを修正するには、次の

[\+\-\^] 

不規則な何かをエスケープすることは通常、たとえ厳密には必要ではない良いアイデアです。

+0

ありがとうございます。私はほとんどキャラクタ・レンジを使用しません。何らかの理由で ' - 'がその目的のために使われているのを忘れてしまいました。 – user3570982

+0

正規表現は、まさにこのような理由から、非常に難しいと評判を呼んでいます。 – tadman

関連する問題