re.findall が予期せぬ動作をする
以下に定義されている元の文字列とパターンを使用します。
s = r'abc123d, hello 3.1415926, this is my book' pattern = r'-?[0-9]+(\.[0-9]*)?|-?\.[0-9]+'
re。 search は正確に一致を見つけますが、re.findall は空のリストを生成します。この動作は、['123', '3.1415926'] の予想される出力と矛盾しており、なぜ re.findall がこの結果を生成しないのかという疑問を引き起こします。
問題の理解
2 つの重要な考慮事項が関係しますここ:
正規表現の変更
これに対処するには、パターンを変更して、冗長なキャプチャ グループを削除し、番号を正しく一致させることができます。
pattern = r'-?\d*\.?\d+'
このパターンは次と一致します:
結果
この変更されたパターンを使用すると、re.findall は期待どおりの結果を生成します。出力:
import re L = re.findall(pattern, s) print(L) # Output: ['123', '3.1415926']
以上が「re.search」は成功するのに、「re.findall」が文字列内の数値を検索できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。