我需要匹配c#中JSON数组元素的元素,以便在c#中过滤自动完成。这是我的代码:
string firstname = "h";
List<user> userlist = new List<user>();
user user1 = new user();
user1.firstname = "Hardik";
user1.lastname = "Gondalia";
userlist.Add(user1);
user user2 = new user();
user2.firstname = "John";
user2.lastname = "Abraham";
userlist.Add(user2);
user user3 = new user();
user3.firstname = "Will";
user3.lastname = "Smith";
userlist.Add(user3);
user user4 = new user();
user4.firstname = "Martin";
user4.lastname = "Luthor";
userlist.Add(user4);
var myRegex = new Regex(".*\\b" + firstname + "\\b.*");
var u = userlist.Where(i => myRegex.IsMatch(i.firstname)).ToList();
return Json(u, JsonRequestBehavior.AllowGet);
当我将字符“h”作为名字传递时,我得到的数字是u = 0; 我期待变量u中的user1和user2。
答案 0 :(得分:1)
我发布了一个答案,因为这里有几个问题。
首先,这些名字不包含h
作为整个单词,您在模式中定义\b
以匹配名字作为整个单词。
其次,Hardik
包含大写H
(因此,您应该考虑将RegexOptions.IgnoreCase标志传递给myRegex)。
第三,Regex.IsMatch
也会找到部分匹配,您的模式中根本不需要.*
。
根据代码判断,如果没有正则表达式,可以使用
userlist.Where(i => culture.CompareInfo.IndexOf(i.firstname, firstname, CompareOptions.IgnoreCase) >= 0).ToList()