簡體   English   中英

LinqToObjects中的Regex和Like運算符

[英]Regex and Like operator in LinqToObjects

為了避免混淆,我在談論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*而不是any number of a

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

但是請注意,按照書面規定,它等同於:

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

因為您尚未在正則表達式中放置錨,所以將在字符串中的任何位置搜索正則表達式。

如果要錨定用戶定義的單詞,例如,您要搜索以

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

或以

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM