import re(以下のすべてのコードは、既に評価されているコンテキストを想定しています。)
との違いに関するドキュメントでは、 runningとrunningre.matchをre.search具体的に比較しています。実際のテストは1と比較することになるため、これは私には少しストローマンのように思えます。re.match(pattern, ...)re.search('^' + pattern, ...)re.match(pattern, ...)re.search(r'\A' + pattern, ...)
patternより具体的に言うと、私はとの組み合わせを簡単に思いつくことができませんstring。
m = re.match(pattern, string)
の結果とは異なります。
m = re.search(r'\A' + pattern, string)
( の元のパターンがpatternたまたまタイプunicodeである場合、 の改訂されたパターンも同様であることに注意してくださいr'\A' + pattern。都合のよいことに注意してください。)
強調しておきますが、ここでは、パフォーマンスや利便性などの違いの可能性には関心がありません。現時点では、最終結果の違い (つまり、 の最終値の違い) のみに関心がありますm。
質問をもう少し一般的に表現するとpattern、flags、string、などの組み合わせを探しているので、 inkwargsの最終値はm
r0 = re.compile(pattern, flags=flags)
m = r0.match(string, **kwargs)
minの最終値とは異なります
r1 = re.compile(r'\A' + pattern, flags=flags)
m = r1.search(string, **kwargs)
入力pattern、flags、string、およびのそのような組み合わせはkwargs存在しない可能性がありますが、自信を持ってこのアサーションを行うには、Python の正規表現エンジンの内部に関する深い知識が必要です。IOW、「肯定的な答え」(つまり、説明されている入力の組み合わせが1 つだけからなるもの)とは対照的に、この質問に対する「否定的な答え」はかなり権威のある陳述になります。 (「肯定的な」回答よりも)はるかに深いレベルで作成されました。
要約すると、私は2つの可能な種類のいずれかの答えを探しています:
pattern、flags、string、およびの組み合わせは、上記の最後の 2 つのケースでkwargs異なる値を生成します。m- Python の正規表現の内部に関する知識に基づく、信頼できる「否定的な」回答 (つまり、そのような入力の組み合わせは存在しません)。
1 \Aは、一致が複数行であるかどうかに関係なく、一致を文字列の先頭に固定します。ところで、\A文字列の終わりの一致に対応するのは\Zです。厄介なことに、Python のは Perl の に\Z対応し、Perl のに\zは対応していません\Z。この投稿の以前のバージョンを書いたとき、これは私をつまずかせました。(ところで、Pythonの正規表現\zには特別な意味はありません。一致するだけです。)私のエラーを見つけてくれたJohn Yzに感謝します。