2013-02-15 50 views
0

我想在字符串中找到由空格包圍的特定字符串。例如,我想獲得的價值從真:假從Regex.IsMatch錯誤返回 - 正則表達式

Regex.IsMatch("I like ZaleK", "zalek",RegexOptions.IgnoreCase) 

和價值:

Regex.IsMatch("I likeZaleK", "zalek",RegexOptions.IgnoreCase) 

這裏是我的代碼:

Regex.IsMatch(w_all_file, @"\b" + TB_string.Text.Trim() + @"\b", RegexOptions.IgnoreCase) ; 

當w_all_file是它不工作字符串我正在尋找「 - 」

例如:如果w_all_file =「我喜歡zalek_」 - 字符串「zalek」沒有找到,但如果 w_all_file =「我喜歡zalek-」 - 發現字符串「zalek」

任何想法爲什麼?

感謝,

Zalek

+0

這是什麼語言? – 2013-02-15 19:14:05

回答

0

在正則表達式的\b字符不考慮下劃線作爲word boundry。你可能想改變它的東西是這樣的:

Regex.IsMatch(w_all_file, @"[\b_]" + TB_string.Text.Trim() + @"[\b_]", RegexOptions.IgnoreCase) ;

0

\b詞的邊界,它被定義爲不包含在\w一個字符和一個之間的匹配。 \w[a-zA-Z0-9_]相同,所以它匹配下劃線。

所以基本上,\b將匹配zalek-的「K」之後,而不是在zalek_

這聽起來像你想要的比賽也失敗zalek-,你可以通過使用lookaround做到這一點。只是(?<![\w-])(?![\w-])更換\b之初,並更換\b末:

Regex.IsMatch(w_all_file, @"(?<![\w-])" + TB_string.Text.Trim() + @"(?![\w-])", RegexOptions.IgnoreCase) ; 

請注意,如果您添加其他字符的字符類[\w-],你需要確保的是,「 - 」是最後一個字符,或者用反斜線將其轉義(如果不這樣做,它將被解釋爲一個字符範圍)。

+0

謝謝,它的工作 – 2013-02-19 22:08:21

+0

沒問題,如果我的解決方案工作,你可以[接受](http://meta.stackexchange.com/a/5235/155356)通過點擊答案旁邊複選標記的大綱。這可以讓其他人知道你的問題已經解決。 – 2013-02-19 22:10:09

0

這就是你需要的嗎?

string input = "type your name"; 
string pattern = "your"; 

Regex.IsMatch(input, " " + pattern + " ");