C# 正则表达式匹配C中的Json数组元素#

C# 正则表达式匹配C中的Json数组元素#,c#,json,regex,C#,Json,Regex,我需要匹配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(); us

我需要匹配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);
string firstname=“h”;
List userlist=新列表();
用户user1=新用户();
user1.firstname=“Hardik”;
user1.lastname=“Gondalia”;
userlist.Add(user1);
用户user2=新用户();
user2.firstname=“John”;
user2.lastname=“亚伯拉罕”;
userlist.Add(user2);
user user3=新用户();
user3.firstname=“将”;
user3.lastname=“Smith”;
userlist.Add(user3);
user user4=新用户();
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();
返回Json(u,JsonRequestBehavior.AllowGet);
当我传递字符“h”作为名字时,我得到的u=0的计数;
我期待变量u中的user1和user2。

我发布了一个答案,因为这里有几个问题

首先,这些名字不包含整个单词
h
,您在模式中定义了
\b
,以匹配整个单词的名字

第二,<代码> Hardik <代码>包含大写<代码> h < />代码(因此,您应该考虑将ReGeXoptus.NealEcaseField标记传递给MyReGEX)。 第三,

Regex.IsMatch
也会找到部分匹配,您根本不需要在模式中使用
*

根据代码判断,您可以在不使用正则表达式的情况下实现这一点,使用

userlist.Where(i => culture.CompareInfo.IndexOf(i.firstname, firstname, CompareOptions.IgnoreCase) >= 0).ToList()

“我期待用户1和用户2”-为什么<由于“单词边界”
\b
的原因,code>\bh\b将只与独立的
h
匹配。。。也许从阅读正则表达式教程开始。好吧,这些名字不包含整个单词
h
。和
Hardik
包含大写的
H
(将
RegexOptions.IgnoreCase
标志传递到
myRegex
)。另外,
Regex.IsMatch
也会查找部分匹配,您根本不需要在模式中使用
*
。根据代码判断,在没有正则表达式的情况下,可以使用
userlist.Where(i=>culture.CompareInfo.IndexOf(i.firstname,firstname,CompareOptions.IgnoreCase)>=0.ToList()
(请参阅)@CodeCaster:您的意思是说\b将匹配整个单词而不是单个字符?为什么您甚至需要正则表达式here@zerkms当前位置我认为正则表达式是个不错的选择。任何其他方法都是最受欢迎的。