2017-01-07 37 views
0

我正在尋找一種方法來編寫算法來解決字母沙拉。例如,如果我有字母正則表達式包含特定字符並且具有特定長度的字符串

ZDFOG

也知道,我尋找的字是長3個字符的詞匹配,如果我只能用每個字符一次?

讓我們假設我有一本帶有常用詞彙的字典。

所以RegXx應與

狗 狗 霧 霧 神 神

但不宜用字符串匹配一樣,如果他們是字典,因爲每一個字母的一部分應該包含一次:

ff Ø 鬥 GGG

那麼,有沒有去尋找所有單詞包含特定字符的字典和具有特定長度的優雅的方式?

+0

如果您發佈了一些輸入句子,搜索詞和預期的匹配項,這將是一件好事 – RomanPerekhrest

+0

我已更新我的問題,謝謝 – Kingalione

回答

1

這很不清楚。

如果您的字典是常用字詞,爲什麼ffo doo Ggg應該存在?

我認爲使用C程序得到你想要的會更好。正則表達式不是算法語言。

反正這是你想要什麼:\b(([A-Za-z])((?!\2)[A-Za-z])((?!\2|\3)[A-Za-z]))\b

它抓住你想要的只有3個不同的字母的單詞。

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

但是你要知道,這個技術也許慢。

+0

讓我們假設這些詞在詞典中。 – Kingalione

+0

我編輯了答案。 –

+0

在這種情況下,聰明的for循環比RegEx快嗎? – Kingalione

0

不考慮重複的字母,如egg,解決方案很簡單;提前使用一個固定的樣子,對每個字母:

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

隨着重複,它有點醜陋:

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

你可以使用的通用解決方案:

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

凡數重複{n}是該字母出現的次數是目標詞。360

+0

所以我必須創建所有的組合來尋找,因爲在開始時,比解決方案中給出的字母更多?就像我例子中的字母Z一樣。 – Kingalione

+0

@king no。展望的順序是無關緊要的。您需要爲每個不同的字母創建一個正確的數量。例如,爲了搜索「EGG」,正則表達式可以表示爲:(^ =(。* G){2})(?=。* E)。*'和'^(?=。* E) * G){2})。*'都是正確的 – Bohemian

+0

是的,但讓我們假設在你的蛋例子中給出字母LTGEGU,字長必須是3個字母。所以我必須創建所有可以用字母LTGEGU和長度爲3的組合來匹配字典中的所有單詞或不是? – Kingalione

相關問題