ホームページ >バックエンド開発 >Python チュートリアル >Python で浮動小数点数を照合すると「re.findall()」が空の結果を返すのはなぜですか?

Python で浮動小数点数を照合すると「re.findall()」が空の結果を返すのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-22 07:07:10843ブラウズ

Why Does `re.findall()` Return Empty Results When Matching Floating-Point Numbers in Python?

re.findall の不正動作: 望ましくない空の結果

指定されたシナリオでは、 re.search() は意図した数値を正常に抽出しました。ソース文字列から 123" を指定すると、 re.findall() が予期せず空の文字列を生成しました。

調査の結果、犯人は r'\ であることが判明しました。正規表現パターンの一部。生の文字列 (接頭辞 r が付く) 内では、\ は文字通りに扱われ、バックスラッシュ文字とそれに続く改行以外の任意の文字に一致します。ただし、これは浮動小数点数をキャプチャするための意図された動作ではありません。

問題を修正するために、修正されたパターン -?d*.?d は次の原則に従います。

  • -?
  • d* はオプションの数字と一致します。
  • .?
  • d は 1 つ以上の数字に一致します。

この改訂されたパターンを使用して、re.findall() はソース文字列内の数値を正しく識別するようになりました:

import re

s = r'abc123d, hello 3.1415926, this is my book'
pattern = r'-?\d*\.?\d+'
L = re.findall(pattern, s)
print(L)  # Output: ['123', '3.1415926']

re.findall() がグループをキャプチャせずに一致値を返すには、パターンに次の要素が含まれていない必要があることに注意してください。パターン内に後方参照がない限り、キャプチャ グループまたは非キャプチャ グループ (例: (?:))。

以上がPython で浮動小数点数を照合すると「re.findall()」が空の結果を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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