ファイル内のさまざまなライセンステキストを一致させて認識するための最良の方法を探しています。これらはかなり長い複数行の文字列(場合によっては2レターサイズのページ)であり、一致する場合、いくつかの変数(名前、日付、奇妙な新しい行、奇数のスペース)を除いてほとんど同じでなければなりません。 私の質問は、長い文字列でも長い文字列を一致させる最も良い方法は何ですか?正規表現の使用は正当化されていますか(可変要素のいくつかのワイルドカードを含むライセンステキスト全体を含む巨大な正規表現ですか?)または、特に適応される文字列検索/マッチングアルゴリズムがありますか?長い文字列(ほとんど同じ)と長い文字列が一致する
0
A
答えて
1
約2文字列のLongest common subsequenceを参照してください。 Dynamic programmingに基づく
0
ほとんどの正規表現ライブラリは、普通の人が書いている種類の正規表現では速くなるように調整されていますが、時には致命的な時間を要する正規表現を構築することもできます。あなたのパターンが恐ろしい特別なケースの1つではない場合、実際にはテキストの一致しない場所のほとんどがテキストとパターン、これらの不一致は時間がどこにあるのかです。
パフォーマンスを確実に確認したい場合は、ライセンスのすべての形式に存在する必要がある(可能な限り大きい)固定テキストの文字列を探し、ファイル内で検索してから再チェックします真の一致かどうかをより複雑なやり方で確認することができます。しかし、通常の正規表現検索をすれば、実際にはこれが起こる可能性は非常に高いでしょう。あなたの正規表現をファイルやそのサブセットで緩めて、どれくらい時間がかかるかを見てみましょう。
2つのテキスト間にdiffを作成するアルゴリズムを試してみることもできます。 – svick