簡體   English   中英

如何匹配RegEx中用空格分隔的所有單詞?

[英]How to match all words separated by spaces in 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)";  

以下答案是正確的。

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

暫無
暫無

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

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