別の文字列yの文字列xを正規表現で検索する必要がありますが、次にその文字列のトークン(単語)インデックスを知る必要があります他の正規表現(例えば空白)を使って文字列yをトークン化(分割)した後のヒットの最初の文字。最初の正規表現では部分文字列が見つかる可能性があるので、トークン(単語)の先頭に停止することは保証できません。正規表現文字列検索の後でトークン(単語)インデックスを効率的に見つける方法
これを実装する最適なアルゴリズムは何でしょうか。単純なアプローチは、以下のようになります。
- 検索ループを各要素の長さを変数LENGTHに加算してカウンタに1を加算するカウンタ
- LENGTHがz以上のときにループを停止する
- ヒットの最初の文字のトークンのインデックスCOUNTER の値になります
(これは、分割関数が分割文字を格納することを前提としています。空白)を配列要素としているため、非常に無駄である。
具体的な例(単純な例):「月がチーズでできている」という文字列の検索「ade」のトークン(単語)インデックスを知りたいとします。この関数は私に答えを返します:3(インデックス配列がゼロの場合)
==編集==
アルゴリズムはまた、正規表現検索はトークンの境界を越えたときに動作する必要があります。たとえば、「月がチーズで作られている」の「de of ch」を検索するときには、再びインデックス「3」を返します。あなたの更新情報によると
ニースの一例が、正規表現の検索がトークン内にある場合にのみ動作します。私はそれがそうでないかもしれないことを強調するために質問を編集しました。 – Lozzer
@Lozzer:最新の回答をご覧ください。 – Toto
非常に良い!これは確かに、質問の単純なアプローチよりもずっと効率的です。ありがとうございました。 – Lozzer