正则表达式:获取除某些匹配字符串之外的所

时间:2018-03-23 09:12:15

标签: c# regex

美好的一天,

我对正则表达式很陌生,所以请耐心等待。

在我的系统中,我在网格中使用了4个过滤器。 在其中三个中,它是使用内置功能与某些子文本的简单匹配 e.g。

  1. 过滤器1:显示包含“F0”的所有内容。
  2. 过滤器2:显示包含“P0”的所有内容。
  3. 过滤器3:显示包含“D0”的所有内容。
  4. 这些过滤器运行正常。

    我的问题是我需要在过滤器4中显示其他所有内容(名为“其他”)。它可能是任何东西。

    我可以使用正则表达式覆盖内置过滤,我正在考虑使用一个来查找不包含三个文本的所有内容(“F0”,“P0”,“D0”)。 这段文字永远是这个词的第4和第5个字母。

    但这样的表达怎么样呢?

    非常感谢任何帮助。

    我能做的最好的是以下,我尝试了负面预测

    ^...(?!F0).*|^...(?!P0).*|^...(?!D0).*
    

    但是这总是会产生一个真实的,因为这些是OR,我需要AND它们。

    示例数据:

    • EDMF01 - 不应选择
    • EDMF02 - 不应选择
    • EDMF03 - 不应选择
    • EDMP01 - 不应选择
    • EDMP02 - 不应选择
    • EDMD01 - 不应选择
    • EDMMIS - 应该被选中
    • FXMMIS - 应该被选中
    • JSEDTP - 应该被选中
    • 应选择不包含“F0”,“P0”或“D0”的任何单词

1 个答案:

答案 0 :(得分:3)

您需要使用一个

^...(?![FPD]0).*

甚至

^.{3}(?![FPD]0)

请参阅regex demo

<强>详情

  • ^ - 输入开始
  • ... / .{3} - 除换行符之外的任何3个字符
  • (?![FPD]0) - 不允许FPD紧跟当前位置右侧的0
  • .* - 除了换行符之外的任何0 +字符,尽可能多(如果您使用Regex.IsMatch中的模式.*则不需要{{1}},因为该方法允许部分字符串匹配)。