なぜ
len(re.findall('[0-9999][/][0-9999]', '15/11/2012'))
正しく 2 を返しますが、
len(re.findall('[0-9999][/][0-9999][/]', '15/11/2012'))
0 を返しますか? 1を返すべきではありませんか?
文字クラスを誤解しています。式は、1 つの文字、つまり括弧内の文字の 1 つに[abc123]
一致します。は文字クラスの範囲演算子ですが、正規表現は数値範囲を認識せず、文字列範囲のみを認識します。つまり、は と同等で、重複した時間を指定しているだけです。-
[0-9999]
[0-9]
9
5/1
最初の正規表現で 2 つの一致が見つかった理由は、 and と一致しているためです1/2
。2 番目の正規表現には、任意の 1 桁の数字に一致する柔軟性がないため、失敗します。
たとえば、2 と 1 の結果を返す正しい式は次のようになります。
[0-9]+/[0-9]+
と
[0-9]+/[0-9]+/
それぞれ。は量指定子+
として知られています。