C# 如何完全放弃与正则表达式模式不匹配的字符串的出现?

C# 如何完全放弃与正则表达式模式不匹配的字符串的出现?,c#,regex,linq,C#,Regex,Linq,我正在为字符串列表实现一个正则表达式模式。此类字符串的示例为:“MNT-PUT-Y0-HAS90”。还有其他不需要的字符串,如:“MNT-PUT-HAS90” 当我执行下面的代码时,我得到“”表示不需要的代码,我猜正则表达式是如何工作的。我得到了通缉犯的“MNT-PUT-Y0-HAS90” 问题是:我怎么能完全忽略MNT-PUT-HAS90的出现。我只想检索字符串-“MNT-PUT-Y0-HAS90”的结果 我已经为此实现了以下代码: Store = a.Type == "Machines" ?

我正在为字符串列表实现一个正则表达式模式。此类字符串的示例为:
“MNT-PUT-Y0-HAS90”
。还有其他不需要的字符串,如:
“MNT-PUT-HAS90”

当我执行下面的代码时,我得到“”表示不需要的代码,我猜正则表达式是如何工作的。我得到了通缉犯的
“MNT-PUT-Y0-HAS90”

问题是:我怎么能完全忽略MNT-PUT-HAS90的出现。我只想检索字符串-
“MNT-PUT-Y0-HAS90”
的结果

我已经为此实现了以下代码:

Store = a.Type == "Machines" ? 
string.Join(",", a.Info.Disk.Select(b => b.Store).
Select(x => Regex.Match(x, "[A-Z]+-[A-Z]+-T[0-9]-[A-Z]+[0-9]"))) : null
我尝试将代码更改为以下格式,但它显示了一个错误:
“无法将lambda表达式转换为预期的委托类型,因为块中的某些返回类型不能隐式转换为委托返回类型”

编辑: 刚刚试过这个:

Store = a.Type == "Machines" ? 
        string.Join(",", a.Info.Disk.Select(b => b.Store).
        Where(x => Regex.IsMatch(x, "[A-Z]+-[A-Z]+-T[0-9]-[A-Z]+[0-9]")).ToList()) : null

我没有得到任何错误,但也没有得到所需的输出。

这是一个非常简单的解决方案,但不知怎的,我错过了它。。。 为了解决此问题,我执行了以下操作:

Store = a.Type == "Machines" && a.Power == "on" && 
       string.Join(",", a.Info.Disk.Select(b => b.Store).
       Where(x => Regex.Match(x, "[A-Z]+-[A-Z]+-T[0-9]-[A-Z]+[0-9]"))) != "" ?
       "Do your stuff" : null
你需要使用

Regex.IsMatch(x, "^[A-Z]+-[A-Z]+-[A-Z]+[0-9]+-[A-Z]+[0-9]+$")

详细信息

  • ^
    -字符串的开头
  • [A-Z]+
    -1+ASCII大写字母
  • -
    -一个hypehn
  • [A-Z]+-
    --1+ASCII大写字母和连字符
  • [A-Z]+[0-9]+-
    -1+ASCII大写字母,1+ASCII数字,然后是连字符
  • [A-Z]+[0-9]+
    -1+ASCII大写字母,1+ASCII数字
  • $
    -字符串结束
代码:

Store = a.Type == "Machines" ? 
    string.Join(",", 
        a.Info.Disk
           .Select(b => b.Store)
           .Where(x => Regex.IsMatch(x, "^[A-Z]+-[A-Z]+-[A-Z]+[0-9]+-[A-Z]+[0-9]+$"))
    ) 
    : null;

如果需要在较长字符串中的任何位置进行匹配,请删除
^
$
锚定。

尝试
Regex.IsMatch(x,“^[a-Z]+-[a-Z]+-[a-Z]+[0-9]+-[a-Z]+[0-9]+$”
。顺便问一下,什么类型的商店是
商店
?嘿@WiktorStribiżew。。非常感谢你。。它解决了我的问题,就像我从未有过它一样。。。哇!非常感谢:)商店的类型是字符串。。。
Store = a.Type == "Machines" ? 
    string.Join(",", 
        a.Info.Disk
           .Select(b => b.Store)
           .Where(x => Regex.IsMatch(x, "^[A-Z]+-[A-Z]+-[A-Z]+[0-9]+-[A-Z]+[0-9]+$"))
    ) 
    : null;