ホームページ >バックエンド開発 >Python チュートリアル >Python 3.4.3 では、「re.search」が同じパターンと文字列で正しく動作するのに、「re.findall」が空のリストを返すのはなぜですか?

Python 3.4.3 では、「re.search」が同じパターンと文字列で正しく動作するのに、「re.findall」が空のリストを返すのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-22 20:57:10219ブラウズ

Why Does `re.findall` Return an Empty List While `re.search` Works Correctly with the Same Pattern and String in Python 3.4.3?

re.findall が異常な動作をする

ジレンマ:

Python 3.4 を使用した Python スクリプト内.3、 re.search メソッドは、指定されたパターンを使用して特定のソース文字列に適用されると、予想される結果を提供します。ただし、re.findall は、不可解なことに、同じパターンとソース文字列に対して空のリストを返します。

Exploration:

興味深いことに、 re.findall メソッドは、以下に基づいて文字列から一致を抽出するための要件を満たしているように見えますが、予期しない動作をします。

解決策:

注意深く調査すると、この特異な動作には 2 つの要因が関与していることが明らかになります:

  • パターン構成:
    提供されたパターンには論争の的となる表現が含まれています。 r'.'。エスケープ文字 () の後に改行以外の文字が続くものと一致することを目的としています。ただし、 r'' 文字列リテラルのコンテキスト内では、この式はリテラルと一致しようとするため、誤った動作が発生します。
  • findall 動作:
    findall メソッドは、パターンにキャプチャ グループが含まれていることを想定しています。キャプチャ グループが存在しない場合は、空の文字列が返されます。元のパターンにはキャプチャ グループが欠如しており、目的の一致をキャプチャできません。

修正されたパターン:

この問題を軽減し、一致を正常に抽出するには、次の修正されたパターンになるはずです採用:

-?\d*\.?\d+

説明:

  • -?: オプションのマイナス記号
  • d *: オプション数字
  • .?: オプションの小数点区切り文字
  • d : 1 つ以上の数字

のデモ:

パターンが変更されたため、re.findall メソッドは、予想される一致リストを正確に取得するようになりました:

['123', '3.1415926']

以上がPython 3.4.3 では、「re.search」が同じパターンと文字列で正しく動作するのに、「re.findall」が空のリストを返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。