2017-01-07 18 views
0

私は文字サラダを解決するアルゴリズムを書く方法を探しています。たとえば、私は手紙特定の文字を含む特定の長さの文字列のRegEx

ZDFOGを持っていると私は探しています言葉は、私が唯一の各文字1時間を使うことができればどの単語が一致した3文字の長さであることがわかっている場合にも?

私は共通の単語で辞書があると仮定します。

のでRegXxは

犬 犬 霧 霧 神 神

しかし、彼らはので、すべての文字辞書の一部である場合のような文字列と一致してはならないと一致している必要があります一度含まなければならない:

ff O 斗 GGG

ので、特定の文字が含まれており、特定の長さを持っている辞書ですべての単語を探すためのエレガントな方法はありますか?

+0

いくつかの入力文、検索ワードと予想される一致を投稿した場合は、それが良いでしょう – RomanPerekhrest

+0

私はあなたの質問を更新しましたありがとう – Kingalione

答えて

1

かなり不明です。

あなたの辞書が一般的な単語の場合は、なぜffo doo Gggが存在するはずですか?

あなたが望むものを得るためにCプログラムを使用する方が良いと思います。正規表現はアルゴリズム言語ではありません。それはあなたが望んでいたとしてだけで3つの異なる文字の単語をキャッチ\b(([A-Za-z])((?!\2)[A-Za-z])((?!\2|\3)[A-Za-z]))\b

はとにかくこれはあなたが望むものです。

証明:https://regex101.com/r/wAbT99/3

しかし、この手法は多分遅いことを知っておく必要があります。

+0

これらの単語が辞書内にあると仮定することができます。 – Kingalione

+0

私は答えを編集しました。 –

+0

この場合、賢いforループがRegExより速いでしょうか? – Kingalione

0

重複した文字を考慮しないで、たとえばeggの解決策は簡単です。各文字のために先にアンカーを見て使用します。重複して

^(?=.*F)(?=.*O)(?=.*G).* 

、それは少し醜い:

^(?=(.*E){1})(?=(.*G){2}).* 

の数:

^(?=.*E)(?=.*G.*G).* 

あなたがの一般解を使用することができます繰り返し{n}は、対象単語である文字の出現数です。360

+0

だから私は最初に解決策よりも多くの文字があるので、探してすべての組み合わせを作成する必要がありますか?私の例では文字Zと同じです。 – Kingalione

+0

@king no。ルックアヘッドの順序は関係ありません。あなたは、それぞれの別個の手紙の正しい数量を先に作成する必要があります。例えば、 "EGG"を検索するには、正規表現 '^(?= G){2})(?=。* E)。*'と '^(?=。* E)(?= 。* G){2})。* 'はどちらも正しいです。 – Bohemian

+0

はい、しかし、あなたの卵の例では、LTGEGUの文字が与えられ、単語の長さは3文字でなければなりません。だから私は、LTGEGUという文字と長さ3で作ることができるすべての組み合わせを作成して、辞書内のすべての単語に一致するかどうかを判断する必要がありますか? – Kingalione

関連する問題