【发布时间】:2016-12-08 23:52:52
【问题描述】:
我需要匹配 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。
【问题讨论】:
-
“我期待 user1 和 user2” - 为什么?
\bh\b将只匹配孤独站立的h因为“单词边界”\b...也许从阅读正则表达式教程开始。 -
嗯,这些名字不包含
h作为一个完整的单词。而Hardik包含一个大写的H(将RegexOptions.IgnoreCase标志传递给myRegex)。此外,Regex.IsMatch也可以找到部分匹配项,您的模式中根本不需要.*。从代码来看,你可以在没有正则表达式的情况下实现,使用userlist.Where(i => culture.CompareInfo.IndexOf(i.firstname, firstname, CompareOptions.IgnoreCase) >= 0).ToList()(见stackoverflow.com/questions/444798/…) -
@CodeCaster :你的意思是说 \b 将匹配整个单词而不是单个字符?
-
这里为什么还需要正则表达式
-
@zerkms :我认为正则表达式是不错的选择。任何其他方法都是最受欢迎的。