regex - 不在正则表达式中

标签 regex

如何构建匹配所有具有 ABC、DBE、ABE、FBG 等但不匹配 XBZ 的序列的正则表达式?

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

具体来说,我希望找到所有包含 B 但前面不带 X 或不带 Z 的实例。

我想出了一个使用 grep -v 的变通解决方案反转匹配的选项:
cat file | 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));
}

关于regex - 不在正则表达式中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17348510/

相关文章:

php - 如何获取未在逗号分隔字符串的第一个或最后一个索引但在 MySQL 中的字符串中间索引的值

java - 检索以 '-' 分隔的数字

javascript - 用于匹配特定数组增量的 JS Regex 忽略字符串和单独增量

javascript - JavaScript 中货币值的正则表达式

php - 我可以使用 preg_replace 在多行模式下去除尾随\n 吗?

python - Pandas 拆分列名称

php - 正则表达式验证用户名

regex - Kotlin 正则表达式拆分 - 删除尾随空格

regex - 如何在 RStudio 中查找并替换行尾

regex - postgresql 中的国际化正则表达式