持つことができます。 (\S+)\s*\=\s*(\S+)
\S
マッチ非空白をし、キャプチャグループに./\#@&
、などが可能になります。
\w
試合のみの単語の文字を、あなたが\s+
\s*
にを変更した場合、それがない理由これは=の間に空白の有無にかかわらず、equalsメソッドおよび後の最初の単語の前に最後の単語と一致しました仕事はそれを左から右に解析するからです。空白の量が見つかったら
\s+
.*?
の文字はすべて
" ="
になるまで吸い始めます。したがって、空白文字の後ろの
" ="
より前の行全体と一致します。
遅延評価は、それができる最小のセットを見つけるために戻っていない、それは最初の完全な一致に達すると停止するまで、それだけで行く:
dog dog dog dog = cat cat cat cat
\s+(.*?)\s+=
の怠惰なキャプチャができます:私たちをdog dog dog
最初の犬の後に" "
から始めて、最初の犬の後に始まり、最初に" ="
が見つかるからです。 2番目のグループは、等号の付いたスペースで終了するという余分な要件がないため、期待したことを行います。
=
の後に、遅延は、それがマッチを得る最初のポイントであるため、最初の単語だけに制限されます。欲張りなバージョンでは、文字を吸い続けて、最後に長い文字列を見つけるのは\s+
です。
tl; dr:遅延評価は最小一致を見つけるために戻ってこない、左から右に解析するときの最初の一致を取得する。それはog
で最初d
に一致するように、他のすべてのd
Sをガツガツするために、必要に応じてd+?og
は、それの全体がddddddog
にマッチしますし、それが戻って、それは本当にすべてのそれらの余分な文字を食べるのに必要かどうかを確認するために、あまりにも怠惰です。
あなたは '\ s +(。*?)\ s + \ = \ s +(。*?)$'が必要だと思うので、2番目のキャプチャグループにアクセスする必要があります。 '\ s'を強制しています。 – rock321987
機能を使用していますか? 're.search(your_regex、" my name = jil smith ")'は 'name'と' jil'を取得します。 – chepner
@chepnerそれは 'reに失敗します。あなたの例では、 'my'の前または' smith'の後ろに空白がないので、search(your_regex、 "my name = jil smith") 'のように動作します。 – TemporalWolf