文字列内の余分なスペースをすべて削除する必要があります。正規表現を使用して文字列を一致させ、一致した文字列を他の文字列に置き換えます。理解を深めるために、以下の例を参照してください。
3 つの入力文字列:
Hello, how are you?
Hello , how are you?
Hello , how are you ?
これは、1 つのパターン正規表現で一致する 3 つの文字列です。次のようになります。
Hello\s*,\s+how\s+are\s+you\s*?
正常に動作しますが、パフォーマンスに問題があります。多くのパターン (~20k) があり、各パターンを実行しようとすると、実行速度が非常に遅くなります (3 ~ 5 分)。
多分これを行うためのより良い方法がありますか?たとえば、いくつかのサードパーティのライブラリを使用しますか?
UPD: 皆さん、この質問はこれを行う方法に関するものではありません。最高のパフォーマンスでこれを行う方法についてです。:)
もっと詳しく説明しましょう。主な目標は、テキストをトークン化することです。(いくつかのトークンを特別な記号に置き換えます)
たとえば、「ナイストライ」というトークンがあります。次に、「これはいい試みです」というテキストを入力します。結果: 「これは @tokenizedtext@ です」ここで @tokenizedtext@ いくつかの特殊記号。この場合は問題ありません。
次に、「Mike said it was a nice try」という文字列があります。結果は「Mike said it was a @tokenizedtext@」になるはずです。主なアイデアは明確だと思います。
だから、たくさんのトークンを持つことができます。それを処理するとき、トークンを「nice try」からパターン「nice\s+try」に変換します。このパターンの入力テキストに置き換えてみてください。それは正常に動作します。しかし、トークンにさらにスペースがあり、句読点もある場合、私の正規表現は大きくなり、動作が非常に遅くなります。
この問題を解決するための提案 (技術的または論理的) はありますか?