2011-03-07 59 views
3

我有一個長長的名單是其中的一個片段看起來是這樣的:正則表達式來否定上任意兩個,或詞

X1000ABC 
X1100ABC 
X2000ABC 
X2200ABC 
X3000ABC 
X3300ABC 

有人能解釋我如何去匹配琴絃的所有除了X1000ABCX2000ABC

我的問題是,我有一個很長(可能增長)的代碼列表,只有4位數字不同。需要排除列表中的兩個代碼(我知道哪兩個代碼)。

我試過使用負向視向,但是......我可能得到了錯誤的語法,因爲我似乎無法得到「或」來處理它。或者...我只是不明白前瞻。

任何幫助表示讚賞。提前致謝。

+0

測試,我不知道你需要這個東西。但是「手工」檢查每一行可能更實際,即沒有正則表達式。只需比較'X1000ABC'和'X2000ABC'。如果匹配,則放棄這些​​行。 – phimuemue 2011-03-07 12:16:16

回答

2

這是我會怎麼做,在正則表達式由JavaScript支持的味道:

(?!X[12]000ABC)X[0-9]{4}ABC 

這將使用內部字符類向前看。如有必要,在開始和結束處添加^$錨點(包括位於預見範圍內的$)。

1

這個怎麼樣?

X(?![12]000)\d{4}ABC 

在Python

>>> x 
'X1000ABC\nX1100ABC\nX2000ABC\nX2200ABC\nX3000ABC\nX3300ABC' 
>>> re.findall("X(?![12]000)\d{4}ABC",x) 
['X1100ABC', 'X2200ABC', 'X3000ABC', 'X3300ABC']