2012-10-03 48 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 –

相关问题