我有以下代码扩展了我的过滤器功能,允许我搜索多个邮政编码。前任。 (1254,125,145,1455)

当前代码:

if (Post_Code_PAR != null)
{
    String[] PostCode_Array = Post_Code_PAR.Split(',');
    query = from p in query where PostCode_Array.Contains(p.Post_Code) select p;
}

我想以某种方式扩展此代码,如果我给它类似 (0*) 的东西,它会找到以 0 开头的邮政编码。如果我给它 123*,它会给我所有以 123 开头的邮政编码。谢谢很多。

最佳答案

使用正则表达式:

  • https://msdn.microsoft.com/en-us/library/ms228595.aspx
  • https://msdn.microsoft.com/en-us/library/az24scfc(v=vs.110).aspx

  • 例子:
    IEnumerable<string> allInputs = new[] {"70000", "89000", "89001", "90001"};
    string commaSeparatedPostCodePatterns = @"89000 , 90\d\d\d";
    
    if (string.IsNullOrWhiteSpace(commaSeparatedPostCodePatterns))
        return;
    
    string[] postCodePatterns = commaSeparatedPostCodePatterns
                                    .Split(',')
                                    .Select(p => p.Trim()) // remove white spaces
                                    .ToArray();
    
    var allMatches =
        allInputs.Where(input => postCodePatterns.Any(pattern => Regex.IsMatch(input, pattern)));
    
    foreach (var match in allMatches)
        Console.WriteLine(match);
    

    遇到这样的问题,最初的需求非常简单,但很快就会变得越来越复杂(由于国际化、规则的异常(exception)、一些智能测试人员测试了像 90§$% 这样的意外极限情况……)。所以正则表达式提供了最好的权衡简单性与可扩展性

    等价于 * 的正则表达式是 .* 。但在您的情况下,您宁愿需要更多限制性模式并使用 \d 占位符匹配单个数字。可选数字是 \d? 。零个或多个数字将是 \d* 。一位或多位数字是 \d+ 。请查看文档以获取更多详细信息。

    10-07 23:54