2016-08-23 171 views
-3

我有下面的代码:匹配字符串通配符

string d = "OR.ISSUE226568"; 
string p; 
switch (d) 
{ 
    case "VOID": 
    p = "VOID";       
    break; 

    case "OR.*": 
    p = "Reissue"; 
    break; 
} 

的问题是,现在第二种情况下是行不通的。

我需要一些可以充当通配符的东西,以便可以识别任何“OR.ISSUE1234567”并将适当的值分配给p变量。

所以如果d以“OR”开始。 p的值将是“重新发行”。

关于如何做到这一点的任何想法?

+0

你听说过正则表达式?这会给你一个更一般的方式来匹配模式。如果这很简单,'p.StartsWith(“OR。”)'会做。但是,您无法使用任何一种开关。 –

+3

很明显答案是否定的 – Bass

回答

1

RegEx似乎是一个更好的方法。使用正则表达式,您可以使用通配符,它​​可以非常强大。如果添加“使用System.Text.RegularExpressions;”你将能够访问它。以下是一个示例。有很多网站可以在Google上找到,这些网站将解释不同的符号以及如何构建匹配模式。

 string d = "OR.ISSUE226568"; 
     string p; 

     if (Regex.IsMatch(d, "^OR.*$")) 
     { 
      Console.WriteLine("Worked!"); 
     } 

     Console.ReadLine(); 
0

您可以通过开关这样做是为了使用,而不是一个switch语句条件:

if (d == "VOID") 
{ 
    p = "VOID"; 
} 
else if (d.StartsWith("OR.")) 
{ 
    p = "Reissue"; 
} 

或者你可以看看使用正则表达式来匹配您的字符串,如果你想要做更复杂的东西吧(见MSDN)。

0

没有办法使用带有通配符的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更容易,更有意义。

0

如果你只有开始与类型检查的支持,你可能需要在运行时更改他们,你可以使用字典:

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();