ストリームに適用されるre.findall
、またはより良い意味では、re.finditer
の機能を利用する方法はありますか(つまり、読み取り用のファイルハンドルを開いていますか)。ストリーム上のfindall/finditer?
ではなく、です。一致するパターンが1行の入力内に完全に含まれている(つまり、複数行のパターンが許可されている)と仮定します。また、最大一致長を想定していません。
この一般性のレベルでは、正規表現エンジンが文字列全体にアクセスする必要がある正規表現を指定することは可能です(例:r'(?sm).*'
)。もちろん、ファイル全体をメモリに保存しますが、現時点ではこの最悪のシナリオには関心がありません。結局、ではないがメモリにファイル全体を読むことを必要とする複数行一致の正規表現を書くことは完全に可能です。
コンパイル済みの正規表現から基本となるオートマトン(または内部的に使用されているもの)にアクセスして文字ストリームにすることはできますか?
ありがとうございます!
編集:Tim Pietzckerとrplntの回答に応じて、複数行のパターンと一致する長さに関する説明が追加されました。
編集ありがとうございます - 私は私の答えを更新しました。 –