2012-10-03 51 views
1

我正在學習正則表達式,但仍然覺得很難學。
所以我的問題是這樣的,我給一組關鍵字:如何匹配正則表達式中由空格分隔的所有單詞?

敏捷的棕色狐狸

在那裏我有一大堆的句子像找到:

的Brown SexyFox在後院快速跳躍......

如果有與這些詞相匹配的詞(不區分大小寫):

的,將,褐色,棕色,狐狸,狐狸,快,快

那麼我可以說,返回值是true

如何做到這一點的正則表達式?我正在考慮拆分單詞並放入Array並使用循環並使用.Contains(...)找到它們,但我知道這並不理想。

其實我還有一個擔心。但我害怕將它作爲一個新問題發佈。
所以我的第二個問題是,如何正則表達式讀取模式?優先事項和最不重要的是什麼?
無論如何,請幫我解決我的問題。

編輯

很抱歉的響應晚,但@PatrikW的解決方案似乎不工作。
我有靜態類:

public static bool ValidateRegex(string value, string regex) 
    { 
     value += ""; // Fail safe for null 
     Regex obj = new Regex(regex, RegexOptions.IgnoreCase); 
     if (value.Trim() == "") 
      return false; 
     else 
     { 
      return obj.IsMatch(value); 
     } 
    } 

構建正則表達式:

keyword = "maria"; 
      string regexPattern = "(?<=\b)("; 
      string Or = string.Empty; 

      foreach (string item in keyword.Split(new char[] { ' ', ',', '.' }, StringSplitOptions.RemoveEmptyEntries).ToList()) 
      { 
       regexPattern += Or + "(" + item + ")"; 
       Or = "|"; 
      } 

      regexPattern += ")(?=\b)"; 

數據信息:

List<Friend> useritems = null; 
useritems = ((List<Friend>)SessonHandler.Data.FriendList).Where(i => 
    Utility.ValidateRegex(i.LastName, regexPattern) || 
    Utility.ValidateRegex(i.FirstName, regexPattern) || 
    Utility.ValidateRegex(i.MiddleName, regexPattern)).ToList(); 

//regexPattern = "(?<=\b)((maria))(?=\b)" 
//LastName = "MARIA CALIBRI" 
//FirstName = "ALICE" 
//MiddleName = null 

可能是我做錯了什麼的代碼。請幫忙。

EDIT 2
我忘了@跡象。這必須現在工作:

string regexPattern = @"(?<=\b)("; 
. 
. 
. 
regexPattern += @")(?=\b)"; 

下面的答案是正確的。

+0

你有什麼試過?你是否開始使用正則表達式模式?你需要使用正則表達式嗎?正則表達式從左到右閱讀。您可以根據需要將字符設置爲可選或必需。 – CSharpDev

回答

3

菲菲表明什麼是更動態的解決方案,但這裏有一個模式來找到你已經得到了確切的關鍵字:由於領先的

"(?<=\b)((The)|(quick)|(brown)|(fox))(?=\b)" 

和拖尾捕獲組,它只會匹配整個單詞和不是其中的一部分。

下面是一個例子:

Regex foxey = new Regex(@"(?<=\b)((The)|(quick)|(brown)|(fox))(?=\b)"); 
foxey.Options = RegexOptions.IgnoreCase; 
bool doesMatch = foxey.IsMatching("the Brown SexyFox Jumps soQuickly in the backyard..."); 

編輯 - 正則表達式引擎:

簡單的說,正則表達式引擎遍歷輸入字符串一個字符時,開始在最左邊的一個,根據我們編寫的正則表達式的第一部分進行檢查。如果匹配,解析器將移動到下一個字符並根據模式的下一部分進行檢查。如果它能夠成功地貫穿整個模式,那就是一場比賽。

你可以通過搜索「正則表達式引擎」或其他東西來了解正則表達式的內部結構是如何工作的。這裏有一個選擇: http://www.regular-expressions.info/engine.html

+0

實際上我的錯,因爲我沒有完全得到這個問題。 +1 –

相關問題