[英]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.