匹配带有通配符的字符串
本文关键字:字符串 通配符 | 更新日期: 2023-09-27 18:03:33
我有以下代码:
string d = "OR.ISSUE226568";
string p;
switch (d)
{
case "VOID":
p = "VOID";
break;
case "OR.*":
p = "Reissue";
break;
}
问题是现在第二种情况不工作。
我需要一些可以作为通配符的东西,以便任何"或"。ISSUE1234567"可以被识别,并将适当的值分配给p变量。
如果d以"OR"开头,p的值将是"Reissue"
有什么好主意吗?
看起来RegEx是一种更好的方法。使用RegEx,您可以使用通配符,并且它可以非常强大。如果您添加"using system . text . regulareexpressions;",您将能够访问它。下面是一个示例。你可以在谷歌上找到一堆网站,它们会解释不同的符号以及如何构建匹配的模式。
string d = "OR.ISSUE226568";
string p;
if (Regex.IsMatch(d, "^OR.*$"))
{
Console.WriteLine("Worked!");
}
Console.ReadLine();
您可以切换到使用条件语句而不是switch语句:
if (d == "VOID")
{
p = "VOID";
}
else if (d.StartsWith("OR."))
{
p = "Reissue";
}
如果你想做一些更复杂的事情,你也可以使用Regex来匹配你的字符串。
没有办法将switch
块与通配符(或例如正则表达式)一起使用。但是根据你的问题,你可以这样做:
string d = "OR.ISSUE226568";
if(d.StartsWith("OR."))
d = d.Remove(3);
string p;
switch (d)
{
case "VOID":
p = "VOID";
break;
case "OR.":
p = "Reissue";
break;
// other cases...
}
但是由于您只有两个case
语句,因此根本不需要switch
。使用if/else
更容易,更有意义。
如果您只支持开头的类型的检查,并且您可能需要在运行时更改它们,您可以使用字典:
string d = "OR.ISSUE226568";
//string d= "VOID";
// Dictionary with start of the string
var target = new Dictionary<string,string>() {
{"VOID","Void"},
{"OR.", "Reissue"}
};
// find the one that matches
var p = (from kv in target
where d.StartsWith(kv.Key)
select kv.Value).FirstOrDefault();