2011-06-26 20 views
2
import re 
str="Everyone loves Stack Overflow" 
print(re.findall("[ESO][^.]",str)) 

なぜ[^.]は何もしません。私はそれが文字ではない文字と一致すると思った - 言い換えれば、何もない!しかし、出力は次のとおりです。Pythonでの正規表現[^。]

['Ev', 'St', 'Ov'] 

誰かがこれについていくつか光を当てることができますか? googleで[^.]のようなものを検索することは不可能で、正規表現についてのpythondocsも役に立たなかった。

+0

あなたは実際に何を解決しようとしていますか? –

+0

@Sentinelこれは私が概念をよりよく理解できるようにするためです。将来の努力に役立つでしょう;) – EdgarJames

答えて

15

正規表現の特殊文字のほとんどは、しばらくそう.マッチ任意の文字、文字クラス(角括弧)内は、その特殊な意味を失い、[.].以外の任意の文字をリテラル.[^.]マッチにマッチします。 .のような文字を大括弧で囲むだけで、正規表現ライブラリのコーナーケースを心配することなく、文字通り扱うことができます。

+0

D'uh!私は30分それを見つめて、それを理解できませんでした。ありがとうございました! – EdgarJames

4

文字クラス[]には、独自の小さな言語があります。具体的には、文字クラス内のドット.は実際の.と一致します(ワイルドカードではありません)。

3

ほとんどの文字は、文字グループ内にあるときに特別な意味を失います。

したがって.は任意の文字と一致しますが、[.]はドットのみと一致します。したがって、[^.]は、ドットではないすべてのものと一致します。