LinqToObjects 中的正则表达式和 Like 运算符
为了避免混淆,我只讨论 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);
}
任何建议
Just to avoid confusion I am talking about linq to object and nothing else.
I am working with lots objects in memory and I need to filter them.
we have a screen with lots of options where a user can select many values.
I need to implement something similar to the "Like" operator in sql.
I did found a post about it in this site and uses regex but I have never used it.
I want to know if my string pattern is correct.Should not use "%" "%"?
I have also read that you should use a combination of startWith -endWith and contains,but I have not found any examples that uses all the them combined,just to get a feel how to do it.
I do something like this
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);
}
Any suggestions
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您想检查一个字符串是否包含另一个字符串,您可以使用:
或
(第二个变体很好,因为使用
IndexOf
您可以指定CultureInfo
)如果您想混合
Regex
中的用户定义单词,您应该使用Regex.Escape()
对其进行转义,这样如果用户写入a*
,搜索到的文本是a*
任意数量的 a
。但请注意,正如所写,它相当于:
因为您尚未将锚点放置到正则表达式中,所以将在字符串中的任何位置搜索正则表达式。
如果您想锚定用户定义的单词,例如您想搜索以以下开头
或结尾的单词
If you want to check if a string contains another you can use:
or
(the second variant is good because with
IndexOf
you can specify theCultureInfo
)If you want to mix a user-defined word in a
Regex
you should use theRegex.Escape()
to escape it, so that if the user writesa*
, the searched text isa*
instead ofany number of a
.But note that as written, it's equivalent to:
because you haven't put anchors to your regex, so the regex will be searched anywhere in the string.
If you want to anchor the user-defined word, so for example you want to search for words that begin with
or end with