6

私はかなり最近 Python に切り替えました。特定のタグやその他の文字列パターンを削除して、非常に多数の Web ページ (約 12k) (ただし、テキスト ファイルと同様に簡単に考えることができます) をクリーンアップすることに興味があります。このために、Python で re.sub(..) 関数を使用しています。

私の質問は、より多くのパターンに一致する 1 つの大きな正規表現を作成するか、より小さく単純な正規表現で関数を数回呼び出す方が (効率の観点から) 優れているかどうかです。

例として、次のようなものを使用する方が良いですか

 re.sub(r"<[^<>]*>", content)
 re.sub(r"some_other_pattern", content)

また

 re.sub(r"<[^<>]*>|some_other_pattern",content)

もちろん、前のパターンは非常に単純であるため、ここではまとめていませんが、実際のシナリオではまとめます。

LE: この質問は、ファイルの HTML の性質とは関係ありませんが、複数の正規表現パターンを処理するときの Python の動作とは関係ありません。

ありがとう!

4

3 に答える 3

3

複雑にしないでおく。

より小さな正規表現を使用してこのようなものを解析する方が安全だと思います。少なくともそのようにすると、異常な動作をしている場合でも、大規模な正規表現のどの特定のセクションが異常な動作をしているかを調べるために掘り下げる必要はありません。行った交換を適切にログに記録していれば、問題が発生した場合にその原因を特定するのは簡単です。

あなたはこれに遭遇したくない

于 2012-09-23T23:59:25.910 に答える
2

一般的に言えば、「順次」と「並列」のアプリケーションは同じではなく、異なる結果になる可能性があります。これは、順次置換が互いに影響を与える可能性があるためです。

パフォーマンスに関しては、1 つの式のパフォーマンスが向上すると思いますが、それは単なる推測です。個人的には、読みやすくするために、複雑に保ち、「冗長」モードを使用することを好みます。

于 2012-09-24T06:38:30.437 に答える
1

「HTML 以外の部分をクリーンアップしています」に関する追加のコメントを理解しました。前の RE が置き換えたコンテンツを後の RE が見つけて置き換える可能性があるため、「代替」演算子を使用し、単一の RE を使用する方がよいでしょう。

また、BeautifulSoupを使用して HTML ファイルを読み込んで調べることも検討してください。これにより、テキストを置き換えようとしているときに HTML 構造をキャプチャするリスクがはるかに少なくなり、テキストの適切な部分を見つけることができます。

于 2012-11-22T21:48:38.743 に答える