*
は0以上を意味し、?
のような貪欲でないオペレータと使用しない限り、常に可能な限り貪欲になります。正規表現でアスタリスクを使用すると、キャレット記号が欲張りにならない理由
>>> re.search('.*hello','hai hello there, hello again').group()
'hai hello there, hello'
>>> re.search('.*?hello','hai hello there, hello again').group()
'hai hello'
私はちょうど次のコードに遭遇し、動作を見るには少し驚いた。パターン\^*
で
>>> re.search('\^*','abc^').group()
''
>>> re.search('a*','abc^').group()
'a'
、私はそれは、文字列中に存在する1つのキャレット記号と一致すると予想。
しかし、それは空の文字列が一致すると、キャレット記号の0が発生して終了することにより、非貪欲に動作しなければならない理由は? ^
が正規表現に特別なので
はそれですか?だから、どうすれば^
と*
のシンボルを一致させることができますか?
注:もちろん、\^+
のパターンでは、明らかに文字のキャレットシンボルと一致します。
文字列は左から右に解析され、したがって、あなたの '\は^ *'スタートと 're.search'リターンで空の文字列に、この最初の出現のみにマッチします。 –
@WiktorStribiżew:Gr8 !!! 're.search( 'a *'、 'bca ^')。group()'で、空の文字列も返します。エンジンは最初に 'b'文字を解析し、一致するものがゼロで終了します。ありがとう:) – Dinesh
検索されたパターンが最初の文字で始まっていない場合、アスタリスクは非貪欲な動作をしますか? – Dinesh