2011-03-07 56 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']