正则表达式否定两个“要么-要么”单词

3

我有一个长列表,其中一部分看起来像这样:

X1000ABC
X1100ABC
X2000ABC
X2200ABC
X3000ABC
X3300ABC

请问如何匹配除了X1000ABCX2000ABC之外的所有字符串?

我的问题是,我有一个很长(可能还在增加)的代码列表,它们只在4位数字上有所不同。其中两个代码(我知道是哪两个)需要被排除在外。

我尝试使用负向先行断言,但是......我可能语法有误,因为似乎无法与其一起使用“或”操作。或者......我只是不理解负向先行断言。

感谢您的帮助。提前致谢。


我不确定你需要这个做什么。但是可能更实际的方法是“手动”检查每行,即不使用正则表达式。只需与 X1000ABCX2000ABC 进行比较。如果匹配,则丢弃这些行。 - phimuemue
3个回答

4
您可以使用正则表达式:
^(?!X1000ABC$)(?!X2000ABC$)X[0-9]{4}ABC$

See it on Rubular


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']

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接