正则表达式 – 不在正则表达式中

如何构建一个匹配所有具有ABC,DBE,ABE,FBG等序列的正则表达式,而不是XBZ?

我的示例序列ABC,DBE等仅仅是代表性的.我不是在寻找那些特定的模式. A,B,C,D,E等可以采用任何模式的形式.例如,X,B和Z可以是单词.

具体来说,我希望找到所有包含B但不以X开头但后面没有Z的实例.

我使用grep -v选项提出了一个解决方法,该选项反转了匹配:

猫文件| grep -ne“.* B. *”| grep -ve“XBZ”

但我宁愿有一个正则表达式.

最佳答案
到那儿需要一段时间,但这种模式:

(.*((?!X).B|B(?!Z).))|(^B)|(B$)

寻找(不是X的东西)B或B(不是Z的东西). TDD代码如下:

[Test]
public void TestPattern()
{
    const string pattern = "(.*((?!X).B|B(?!Z).))|(^B)|(B$)";

    Assert.IsFalse(Regex.IsMatch("Hello", pattern));
    Assert.IsTrue(Regex.IsMatch("Hello ABC", pattern));
    Assert.IsTrue(Regex.IsMatch("Hello DBE", pattern));
    Assert.IsTrue(Regex.IsMatch("Hello ABE", pattern));
    Assert.IsTrue(Regex.IsMatch("Hello FBG", pattern));
    Assert.IsTrue(Regex.IsMatch("Hello ABC World", pattern));
    Assert.IsTrue(Regex.IsMatch("Hello DBE World", pattern));
    Assert.IsTrue(Regex.IsMatch("Hello ABE World", pattern));
    Assert.IsTrue(Regex.IsMatch("Hello FBG World", pattern));
    Assert.IsTrue(Regex.IsMatch("ABC World", pattern));
    Assert.IsTrue(Regex.IsMatch("DBE World", pattern));
    Assert.IsTrue(Regex.IsMatch("ABE World", pattern));
    Assert.IsTrue(Regex.IsMatch("FBG World", pattern));
    Assert.IsTrue(Regex.IsMatch("Hello DBE World XBZ", pattern));
    Assert.IsTrue(Regex.IsMatch("Hello ABE World XBZ", pattern));
    Assert.IsTrue(Regex.IsMatch("Hello FBG World XBZ", pattern));
    Assert.IsFalse(Regex.IsMatch("Hello XBZ", pattern));
    Assert.IsTrue(Regex.IsMatch("Hello XB", pattern));
    Assert.IsTrue(Regex.IsMatch("Hello BZ", pattern));
    Assert.IsTrue(Regex.IsMatch("XB Hello", pattern));
    Assert.IsTrue(Regex.IsMatch("BZ Hello", pattern));
    Assert.IsTrue(Regex.IsMatch("B", pattern));
}

转载注明原文:正则表达式 – 不在正则表达式中 - 代码日志