匹配带有通配符的字符串

本文关键字:字符串 通配符 | 更新日期: 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();