我正在为字符串列表实现正则表达式模式。这种字符串的示例是:"MNT-PUT-Y0-HAS90"
。还有其他UNWANTED字符串,例如:"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
我尝试将代码更改为以下内容,但它显示错误:"Cannot convert lambda expression to the intended delegate type because some of the return types in the block are not implicitly convertible to the delegate return type"
Store = a.Type == "Machines" ?
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]")).ToString()) : null
修改 试过这个:
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
我没有错误,但也没有获得所需的输出。
答案 0 :(得分:1)
您需要使用
Regex.IsMatch(x, "^[A-Z]+-[A-Z]+-[A-Z]+[0-9]+-[A-Z]+[0-9]+$")
<强>详情
^
- 字符串的开头[A-Z]+
- 1+ ASCII大写字母-
- 一个超人[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;
如果预计匹配在较长字符串中的任何位置,请移除^
和$
个锚点。
答案 1 :(得分:0)
这是一个非常简单的解决方案,但不知怎的,我错过了它... 我做了以下解决问题:
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