2011-01-26 69 views
3

我想查找不匹配特定字符序列的字符串。例如:Quick Python Regex問題:匹配否定字符集

REGEX = r'[^XY]*' 

我想尋找一個有任意數量的字符,除了一個X和Y彼此相鄰串...正則表達式上面並沒有因爲工作它會分別阻止X和Y.

+0

我不太瞭解python正則表達式,但你應該有什麼工作。或者嘗試用'+'替換`*` – 2011-01-26 22:42:03

+1

我剛剛在http://nmichaels.org/regular.py中檢查過,它似乎工作正常。你能給我們一個字符串來測試它嗎? – nmichaels 2011-01-26 22:43:20

回答

2

如何:

if "XY" not in s: 
    print "matched" 
else 
    print "not matched" 

或者這是包含在一些較長的正則表達式?那麼也許你想要一個負前瞻表達:

REGEXP="...(?!XY)..." 

編輯:固定錯字

1

有幾個方法可以做到這一點。

^(?!.*XY).*$ 

先行表達試圖將字符串中的任何一個相匹配序列XY。這是一個負面超前,所以如果它找到一個,匹配嘗試失敗。否則.*繼續並消耗整個字符串。

^(?:(?!XY).)*$ 

這一個多次匹配任何字符(.),但先行確認後才字符是不是XY序列的開始。

^(?:[^X]+|X(?!Y))*$ 

多次匹配一個或多個任意字符,除了X,或者X如果它不跟Y

對於前兩個正則表達式,如果它們可能是源字符串中的換行符,則必須應用DOT_ALL修飾符。第三個不需要,因爲它使用否定字符類 - [^X] - 而不是一個點。