2012-10-29 23 views
3

有沒有辦法找到包含所有給定字符的單詞,包括重複的單詞,使用正則表達式?例如,我想找到列表中的所有單詞如何找到包含所有指定字符的單詞,並重復?

aabc, abbc, bbbc, aaac, aaab, baac, caab, abca 

是隻包含一個「B」和兩個「一的,即aabcbaaccaababca(但不是aaab因爲它有一個額外的」一「)。字長不重要。

雖然這個問題

GREP How do I only retrieve words with only the specified letters?

可以給我一些暗示,我是不是能夠擴展它,所以它會找到人物周反覆。

我只是在玩Python中的re模塊,但是對於這個問題沒有語言/工具的重新定義。

編輯:

一個更好的例子/用例是:給定一個單詞列表,只顯示那些包含用戶,例如輸入的所有字母我想找到所有含有「a」,「d」和「s」的單詞。這是正則表達式的能力嗎? (我已經知道如何做沒有正則表達式)

+1

你正在使用什麼編程語言/正則表達式的味道? –

+0

@MattBall這是一個普遍的問題,並沒有真正受限於特定的工具(還)。我會稍微更新一下這個問題,謝謝。 – Metaphox

回答

0

如果您正則表達式的味道支持向前看符號,那麼你可以使用這個:

\b(?=.*b)(?=([^a]*a){2}[^a]*\b)[abc]+\b 

這需要至少一個B,準確2的,且只允許a,b和c在字符串中。如果你想要求僅一個B和總恰好有4個字符,請使用此:

\b(?=[^b]*b[^b]*\b)(?=([^a]*a){2}[^a]*\b)[abc]{4}\b 
+0

對於任何人低估了答案,下次請對**和**我修正錯誤發表評論。 –

+0

我不明白爲什麼你的回答(以及來自anubhava的回答)也得不到支持。你的答案可能不是最優雅的答案 - 如果這可以通過正則表達式更優雅地完成 - 但它們肯定是正確的。 – Metaphox

+0

@Mepaphox,我的**有一個小小的錯誤,並沒有捕獲所有的案件,所以這是有道理的。不過,我更喜歡downvoters解釋他們的原因。 (我現在也修正了這個錯誤)。對於你的其他問題,我不認爲有一個更簡單的解決方案,我甚至不覺得它真的不雅。使用lookaheads將你的不同需求分割成可管理的塊,如果對字符串有幾個不同的需求(例如安全密碼要求),通常是一種前瞻性的方法 –

0

要在您輸入的字符串精確匹配2和1個B(以任意順序)使用這個正則表達式:

(?=^(?:[^a]*a){2}[^a]*$)(?=^[^b]*b[^b]*$)^.+$ 

Here is a live demo for you

+0

非常感謝!我想知道是不是有一種更加優雅的方式?因爲我可能不得不手動計算用戶輸入了多少'a'。這並不難,但我仍然想知道我能否更簡潔地做到這一點? – Metaphox

+0

我會要求你在你的問題中提供更多的問題背景。就像你說'我可能不得不手動計算有多少用戶輸入'a' - 你在使用用戶提供的輸入嗎?一些細節在這裏肯定會有幫助。 – anubhava

+0

對於這種困惑感到抱歉,但我並沒有真正解決任何問題,只是試圖找出更多正則表達式的能力。我只是想象可能性,比如'如果我不知道有多少'我需要找到',那麼用戶輸入場景。 – Metaphox

相關問題