我有以下代码扩展了我的过滤器功能,允许我搜索多个邮政编码。前任。 (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+
。请查看文档以获取更多详细信息。