从Regex.IsMatch返回错误 - 正则表达式

时间:2013-02-15 19:05:16

标签: regex

我想在字符串中找到一个由空格包围的特定字符串。例如,我希望从:

接收值true
Regex.IsMatch("I like ZaleK", "zalek",RegexOptions.IgnoreCase) 

并且值为false:

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

3 个答案:

答案 0 :(得分:0)

正则表达式中的\b字符并不将下划线视为word boundry。您可能希望将其更改为以下内容:

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

答案 1 :(得分:0)

\b匹配单词边界,其定义为\w中包含的字符与不包含的字符之间。 \w[a-zA-Z0-9_]相同,因此它与下划线匹配。

基本上,\b会在zalek-中的“k”后匹配,但不会在zalek_中匹配。

听起来你希望匹配在zalek-上失败,你可以使用lookaround来完成。只需将开头的\b替换为(?<![\w-]),然后将\b替换为(?![\w-])

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

请注意,如果您向字符类[\w-]添加其他字符,则需要确保“ - ”是最后一个字符,或者使用反斜杠将其转义(如果不是它将被解释为一系列字符。)

答案 2 :(得分:0)

这就是你需要的?

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

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