我想在字符串中找到一个由空格包围的特定字符串。例如,我希望从:
接收值trueRegex.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
答案 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 + " ");