c# - 用 * 过滤,这将限制所有以 Null 开头的值?

标签 c# filter filtering visual-studio-lightswitch

我有以下代码,它扩展了我的过滤器功能,允许我搜索多个邮政编码。前任。 (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 开头的邮政编码. 非常感谢。

最佳答案

使用正则表达式:

例子:

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+。请查看文档以获取更多详细信息。

关于c# - 用 * 过滤,这将限制所有以 Null 开头的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29648425/

相关文章:

filter - 我如何自己编写 Matlab "filter"函数?

C# NotFiniteNumberException 不起作用

c# - 无法从 Func<T> 分配给 Func<Interface>

c# - Html.ActionLink 不传递值

c# - 是否可以从基类构造函数创建派生类?

python - Django:用元组过滤组合列

dictionary - 如何首先实现 Swift 3 字典(其中 :) closure

Jquery 过滤结果将未使用的字母 A-Z 灰显

python - 使用 dask 进行 3D 体处理

python - 黄油过滤痕迹中的时间延迟,为什么以及如何去除它?