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]+$")
看
详细信息
-字符串的开头^
-1+ASCII大写字母[A-Z]+
-一个hypehn-
--1+ASCII大写字母和连字符[A-Z]+-
-1+ASCII大写字母,1+ASCII数字,然后是连字符[A-Z]+[0-9]+-
-1+ASCII大写字母,1+ASCII数字[A-Z]+[0-9]+
-字符串结束$
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;