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)
m
inの最終値とは異なります
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
に感謝します。