2013-08-19 51 views
3

我正在嘗試使用正則表達式來匹配具有3個唯一組的雙字母集。到目前爲止,我有這樣的:使用python正則表達式的雙字母匹配

r".*([a-z])\1.*([a-z])\2.*([a-z])\3.*"  

但是,這並不佔獨特套雙字母。在此先感謝=)

+0

獨特集合的例子是什麼? – Himanshu

+0

如何在應用您提供的正則表達式之後檢查唯一性? – alecxe

+0

三重(或礦石)字母呢?他們被允許嗎? – Tomalak

回答

4

也許是這樣嗎?似乎爲我工作。

r".*([a-z])\1.*((?=(?!\1))[a-z])\2.*((?=(?!\1))(?=(?!\2))[a-z])\3.*" 

(?=expr)non-consuming regular expression,並(?!expr)是正則表達式NOT運算符。

+0

謝謝!,完美的作品! – user2696287

+0

@Tigran不是最後一次將它與'\ 1'進行比較就足夠了嗎?因爲,我們確保'\ 1'和'\ 2'是不同的。 – thefourtheye

+0

@thefourtheye,在這種情況下\ 3可以等於\ 2,這是不可接受的。 –

0

(?= expr)是非消費正則表達式 但是 (?!expr)也是非消費者表達式。這次不等於等於。

因此,將'not'包含在'等號'中並不會增加任何內容。它沒有那麼好。然而,堆疊非消費表達式並不總是可行的,而且單個非消費者將通過使用'或'('|'字符)來完成這項工作。

所以

R」 ([AZ])\ 1([AZ])\ 2 。(\ 1?!)。(\ 1 |!\ 2)([AZ] )\ 3.

整理一些括號也。我認爲這是更清潔,並將在版本之間更可靠。