2014-01-16 71 views
0

我在調整正則表達式公式時遇到了麻煩,無法執行我想要的操作。在Python中查找模式的正則表達式

我想找到一個模式:

AxxHxxxAxxHxxxbbbbbAxxHxxxAxxHxxx 

但不是:

AxxHxxxAxxHxxxAxxHxxxAxxHxxxAxxHxxxAxxHxxxAxxHxxxAxxHxxx 

如果我使用:

"(A\w{2}H\w{3}){2,4}.+(A\w{2}H\w{3}){2,4}" 

它會找到兩個。我試過排除很長的AxxHxxx重複延伸:

"(?!(A\w{2}H\w{3}){8})(A\w{2}H\w{3}){2,4}.+(A\w{2}H\w{3}){2,4}" 

但它實際上不工作。你們有沒有任何想法如何解決這個問題?由於我將在大量數據上運行,因此我希望避免使用拼接字符串等循環地獄。

在此先感謝!

編輯:

由於有在另一組的例子,我會嘗試更多的細節什麼,我試圖完成解釋的興趣。

我想在一個字符串查找片段,其中將包括兩個重複的和一組之間的任何字符,如:「」

.......A..H...A..H...A..H...............A..H...A..H...A..H....................... 

其中是任何角色,並且您有兩個重複的「A..H ...」模塊。唯一的問題是,我不希望找到繼續重複拉伸,如這裏:

.......A..H...A..H...A..H...A..H...A..H...A..H...................... 
+0

什麼是第一和第二個字符串之間的區別? –

+0

bbbbb有什麼格式。它可以以A或H開頭嗎? –

+0

兩個重複模塊(「AxxHxxx」* 2)被「bbbbb」中斷。我希望正則表達式只能在由特定數量的字符中斷的拉伸中查找字符串。 –

回答

0

這似乎產生和您的測試用例正確的結果,但它是非常難看。

/^(?:A.{2}H.{3})+(?:(?!A.{2}H.{3}).)+(?:A.{2}H.{3})+$/

http://regex101.com/r/sW5vG2

這是你想要的嗎?

效率將與字符串的長度成正比。

編輯:使用PCRE http://regex101.com/r/wX8uK2

0

我不知道我有多麼瞭解你的問題改進的方案。

爲了解決您的具體問題,您可以使用類似這樣的東西,我想是的。

^(.*)\1((?!\1).)+\1{2}$ 

檢查DEMO