正規表現を試してみては意味で、左から右に評価されます。だからあなたの正規表現では、
r'<dd><p>([\D3]+)</dd></dl>'
正規表現エンジンが最初にそうであれば、それはそれが数字でないか3
のかどうかについて、それぞれをチェックし、順番に次の各文字を見ていきます、<dd><p>
を探し、となり、マッチに追加してください。 </dd></dl>
のすべての文字は、クラス "nondigitまたは3
"にあるので、すべてが[\D3]+
に一致する部分に追加され、エンジンは忠実に継続します。 3
以外の桁の文字が見つかった場合にのみ停止し、次に正規表現の残りの部分に "通知"します(</dd></dl>
)。
これを修正するには、あなたがそうのような消極的量指定子を使用することができます:正規表現エンジンは、それが試合に追加されますどのくらいで保守的であるべきであることを意味
r'<dd><p>([\D3]+?)</dd></dl>'
(追加
?
に注意してください)。できるだけ多くの文字を「ぐらつき」させるのではなく、今度は
[\D3]+?
を1文字にマッチさせてから、正規表現の残りの部分が一致するかどうかを確認します。一致しない場合は、
[\D3]+?
と2文字などです。
それはまだ完全な正規表現の一致をさせることができますがあることs「を[\D3]+?
が[\D3]
の最短の文字列にマッチするのに対し、それはまだ完全な正規表現の一致をさせることができますがあることs」は基本的には、[\D3]+
は[\D3]
の可能な限り最長の文字列にマッチします。
「現実世界」におけるもちろん
one shouldn't really be using regular expressions to parse HTMLの
、しかし、あなただけの正規表現の練習をしたい場合は、これはおそらくどれにも劣らテキストサンプルです。
ああ、説明をいただきありがとうございます!非常に役立ちます! – bootoons