2015-04-16 72 views
1

是否可以構建一個regex,該列表只匹配一個字符串,該字符串恰好只列出一次子字符串?例如,假設我想要一個正則表達式,其中列出了幾個不同的顏色。如果我把它定義爲:有沒有辦法建立一個正則表達式的特定子串的正則表達式?

'Here are a few different colors: (\w+), (\w+) and (\w+)' 

那麼下面的字符串會的過程中,匹配:

'Here are a few different colors: red, green and red' 

我的問題是,有沒有辦法強制的色彩,(\w+), (\w+) and (\w+)列表,使其剛好包含任何顏色之一?例如,

'Here are a few different colors: red, green and red' # No match because 'red' appears more than once 

'Here are a few different colors: red, green and blue' # Match because all colors appear exactly once 

回答

3
^(?!.*\b(\w+)\b.*\b\1\b)Here are a few different colors: (\w+), (\w+) and (\w+)$ 

嘗試this.See demo.A negative lookahead將確保一個字未再反覆。

https://regex101.com/r/sJ9gM7/114#python

(?!.*\b(\w+)\b.*\b\1\b)指出,不應該有一個字\b\w+\b它獲取字符串中的重複\b\1\b其他地方在字符串中的任何地方。

+1

@ vks確實這是我一直在尋找...謝謝!現在我只需要在**爲什麼**的情況下打開另一個問題;) – asherbar

+0

好的,我剛剛在編輯中看到了解釋...再次感謝! – asherbar

相關問題