正则表达式匹配 C# 中的 Json 数组元素
Posted
技术标签:
【中文标题】正则表达式匹配 C# 中的 Json 数组元素【英文标题】:Regex to Match Json array element in C# 【发布时间】: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()
(见***.com/questions/444798/…)
@CodeCaster :你的意思是说 \b 将匹配整个单词而不是单个字符?
这里为什么还需要正则表达式
@zerkms :我认为正则表达式是不错的选择。任何其他方法都是最受欢迎的。
【参考方案1】:
我正在发布一个答案,因为这里有几个问题。
首先,这些名字不包含 h
作为一个完整的单词,并且您在模式中定义了 \b
以匹配名字作为一个完整的单词。
其次,Hardik
包含一个大写的H
(因此,您应该考虑将 RegexOptions.IgnoreCase 标志传递给 myRegex)。
第三,Regex.IsMatch
也可以找到部分匹配项,您的模式中根本不需要 .*
。
从代码来看,你可以在没有正则表达式的情况下实现,使用
userlist.Where(i => culture.CompareInfo.IndexOf(i.firstname, firstname, CompareOptions.IgnoreCase) >= 0).ToList()
【讨论】:
以上是关于正则表达式匹配 C# 中的 Json 数组元素的主要内容,如果未能解决你的问题,请参考以下文章