0

我想在字符串中找到一个被空格包围的特定字符串。例如,我想从以下位置接收值 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 = "I like zalek_" - 找不到字符串 "zalek",但如果 w_all_file = "I like zalek-" - 找到字符串 "zalek"

任何想法为什么?

谢谢,

扎莱克

4

3 回答 3

0

The \b character in regex doesn't consider an underscore as word boundry. You might want to change it to something like this:

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

于 2013-02-15T19:09:26.647 回答
0

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

所以基本上,\b将在“k”之后匹配,zalek-而不是在zalek_.

听起来您希望匹配也失败zalek-,您可以使用环视来做到这一点。只需将\b开头的(?<![\w-])替换为\b,并将末尾的替换为(?![\w-])

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

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

于 2013-02-15T19:10:35.380 回答
0

这就是你需要的吗?

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

Regex.IsMatch(input, " " + pattern + " ");
于 2013-02-15T19:10:57.470 回答