我有以下代码,它扩展了我的过滤器功能,允许我搜索多个邮政编码。前任。 (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+
。请查看文档以获取更多详细信息。
关于c# - 用 * 过滤,这将限制所有以 Null 开头的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29648425/