我有一個接受2個參數的函數。 參數1:SEARCHTERM, 參數2:產品名稱用c#正則表達式檢查句子中是否有詞匹配
如何檢查是否存在產品名稱在搜索關鍵詞的話,不要緊,它發生在開始,中間或結尾產品名稱的?
它必須逐字匹配,比如說SearchTerm =「cano」,ProductName =「canon」,它應該返回false,不匹配。
我有一個接受2個參數的函數。 參數1:SEARCHTERM, 參數2:產品名稱用c#正則表達式檢查句子中是否有詞匹配
如何檢查是否存在產品名稱在搜索關鍵詞的話,不要緊,它發生在開始,中間或結尾產品名稱的?
它必須逐字匹配,比如說SearchTerm =「cano」,ProductName =「canon」,它應該返回false,不匹配。
如果您只想匹配需要的完整單詞word boundaries\b
,請在搜索詞前後添加。
\b
是一個零寬度斷言,匹配從單詞到非單詞字符或從非單詞到單詞字符的變化。
String term = "Foo";
String[] text = { "This contains Foo bar.", "Foo.", "Foobar", "BarFoo", "foo" };
Regex reg = new Regex(@"\b" + Regex.Escape(term) + @"\b");
foreach (var item in text) {
Match word = reg.Match(item);
if (word.Success) {
Console.WriteLine(item + ": valid");
}
else {
Console.WriteLine(item + ": invalid");
}
}
輸出:
這包含富吧。 =>有效
Foo。 =>有效
Foobar的=>無效
BarFoo =>無效
富=>無效
你不需要正則表達式來進行簡單的字符串搜索。
ProductName.Contains(searchTerm);
因爲你希望能夠指定,它是一個單獨的單詞,而不是一分的話,你需要使用regexes。
你的正則表達式可能會是這樣的,如果你正在尋找存儲在變量「笑」字:
Regex regex1 = new Regex(lol + @"[^a-Z]"); // include grammar marks to avoid issues like "can." not matching
本質上講,你想嘗試匹配只是一句話,使確定在它後面有一個不是另一個字母的字符。那樣,你知道這不是另一個詞。
編輯:試試這個美容代替。自己學了點東西。
string sPattern = @"\b" + lol + @"\b";
EDIT2:看起來STEMA了它第一。 Here's the page I used, for reference.
您的解決方案有幾個問題。首先它會拋出一個Exception「Range in reverse order」,因爲「Z」出現在「a」之前,另一種方式也是錯誤的,因爲在「Z」和「a」之間有6個非字母字符在ASCII表中。接下來的問題是,如果搜索詞後面有字符串結尾,那麼它將失敗,最後:如果文本中的詞之前存在某些內容,會發生什麼情況? – stema 2012-03-13 06:56:35
所有優秀點。爲了我自己的利益,我顯然有點太晚了。讓我看看在我乾草之前是否能解決這個問題。 – 2012-03-13 06:59:03
+1用於改善您的答案(現在正確) – stema 2012-03-13 07:38:04
不過,他希望避免像「可以」而在一個句子時發現「內經」中的那句話。 「.Contains」不會避免這種情況。 – 2012-03-13 06:19:21
我回答後更新了問題。 :) – hungryMind 2012-03-13 08:11:12