gpt4 book ai didi

c# - Linq To 对象中的 Regex 和 Like 运算符

转载 作者:太空宇宙 更新时间:2023-11-03 20:30:27 29 4
gpt4 key购买 nike

为了避免混淆,我说的是 linq to object 而不是别的。我在内存中处理很多对象,我需要过滤它们。我们有一个包含许多选项的屏幕,用户可以在其中选择许多值。

我需要在 sql 中实现类似于“Like”运算符的东西。我确实在这个网站上找到了一篇关于它的帖子并使用了正则表达式,但我从未使用过它。我想知道我的字符串模式是否正确。不应该使用“%”“%”吗?

我还读到你应该使用 startWith -endWith 和 contains 的组合,但我还没有找到任何使用所有它们组合的例子,只是为了感受一下如何去做。

我是这样做的

string pattern = string.Format(".*{0}.*", criteria.SearchText);
myList= myList.Where(x => x.Message.Like(pattern)).ToList();

public static bool Like(this string s, string pattern, RegexOptions options = RegexOptions.IgnoreCase)
{
return Regex.IsMatch(s, pattern, options);
}

任何建议

最佳答案

如果你想检查一个字符串是否包含另一个你可以使用:

myList = myList.Where(x => x.Message.Contains(criteria.SearchText)).ToList();

myList = myList.Where(x => x.Message.IndexOf(criteria.SearchText) != -1).ToList();

(第二个变体很好,因为使用 IndexOf 您可以指定 CultureInfo)

如果你想在 Regex 中混合一个用户定义的词,你应该使用 Regex.Escape() 来转义它,这样如果用户写 a*,搜索到的文本是a*,而不是任意数量的a

string pattern = string.Format(".*{0}.*", Regex.Escape(criteria.SearchText));

但请注意,按照书面形式,它等同于:

string pattern = string.Format("{0}", Regex.Escape(criteria.SearchText));

因为您没有为您的正则表达式添加 anchor ,所以正则表达式将在字符串中的任何位置进行搜索。

如果你想锚定用户定义的词,比如你想搜索以

开头的词
string pattern = string.Format("^{0}", Regex.Escape(criteria.SearchText));

或结束于

string pattern = string.Format("{0}$", Regex.Escape(criteria.SearchText));

关于c# - Linq To 对象中的 Regex 和 Like 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7818055/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com