6

正規表現の検索を実行してパイプを介して抽出したいが、パターンが複数の行にまたがる可能性があるとします。どうすればよいですか?たぶん、正規表現ライブラリはストリームで機能しますか?

Pythonライブラリを使用してこの仕事をしたいと思いますか?しかし、どんな解決策でも大丈夫です。もちろん、ライブラリはコマンドラインツールではありません。

ところで、私は現在の問題を解決する方法を知っています。一般的な解決策を探しているだけです。

そのようなlibrayが存在しない場合、通常のメイシングアルゴリズムが逆方向スキャンを必要としないため、通常のライブラリがストリームで機能しないのはなぜですか。

4

3 に答える 3

6

一般的な解決策を求めている場合、アルゴリズムは次のようにする必要があります。

  1. ストリームのチャンクをバッファに読み込みます。
  2. バッファ内の正規表現を検索します
  3. パターンが一致する場合は、その一致で好きなことを行い、バッファの先頭まで破棄して、match.end()ステップ 2 に進みます。
  4. パターンが一致しない場合は、ストリームからのデータを追加してバッファを拡張します

一致するものが見つからない場合、これは多くのメモリを使用することになりますが、一般的なケースではより適切に行うことは困難です (唯一の最後の文字.*xである大きなファイルで複数行の正規表現として一致を試みることを検討してください)。x

正規表現について詳しく知っている場合は、バッファの一部を破棄できる他のケースがあるかもしれません。

于 2012-10-22T03:18:59.697 に答える
-2

ストリームで正規表現を使用できるとは思いません。データ全体がないと、正の一致を作成できないためです。これは、一致する可能性が高いだけであることを意味します。

ただし、@James Henstridge が述べたように、バッファを使用してこれを克服できます。

于 2012-10-22T03:21:41.707 に答える