如何匹配RegEx中用空格分隔的所有单词?

时间:2012-10-03 12:19:17

标签: c# regex

我正在研究正则表达式,但仍然难以学习 所以我的问题是这个,我给出了一组关键字:

  

快速的棕色狐狸

我必须在一堆句子中找到:

  

Brown SexyFox在后院快速跳跃......

如果与这些单词匹配(不是Casesensitive):

  

,棕色,棕色,狐狸,狐狸,快速,快速

然后我可以说返回值为true

如何在正则表达式中执行此操作?我正在考虑拆分单词并放入数组并使用循环并使用.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  

可能是我对代码做错了。请帮忙。

编辑2
我忘了@号。这必须现在起作用:

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

以下答案是正确的。

1 个答案:

答案 0 :(得分:3)

Felice展示的是更具动态性的解决方案,但这里有一种模式可以找到你所拥有的确切关键词:

"(?<=\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