2015-11-16 139 views
1

查找它后,我想我理解如何在一个句子中查找多个单词的字符串,但它找不到匹配项。有人能告诉我我做错了什么吗?我需要能够找到单个或多个单词匹配。我通过“找到”方法,并没有找到匹配。另外,如果用户没有将他们的搜索短语用引号引起来,我也需要它来搜索输入的每个单词。C#RegEx查找字符串中的特定字符串或全部单词

var pattern = @"\b\" + searchString + @"\b"; //searchString is passed in. 

Regex rgx = new Regex(pattern); 

var sentence = "I need to find a string in this sentence!"; 

Match match = rgx.Match(sentence); 

if (match.Success) 
{ 
    // Do something with the match. 
} 
+0

为什么'@ “\ B \”'第二反斜线? –

+0

单词可以用引号括起来吗?像“剧院”,“博物馆”(可以与剧院和博物馆相匹配)与只与*剧院博物馆相匹配的“剧院博物馆”相匹配?以及如果它们包含双(逃避?)引号?像“\”夏日\“潮流\”“时尚\”? –

+0

如果用户想要搜索单词,它可以像“剧院”,“博物馆”或剧院博物馆(不含引号)。 – Wannabe

回答

1

只是删除第一@"\b\"第二\

var pattern = @"\b" + searchString + @"\b"; 
       ^

IDEONE demo

请注意,如果你有特殊的正则表达式的元字符(如()[+*等)在您的searchString s中,您可以使用Regex.Escape()来转义它们:

var pattern = @"\b" + Regex.Escape(searchString) + @"\b"; 

如果这些字符可能会出现在边缘位置,使用lookarounds而不是单词边界:

var pattern = @"(?<!\w)" + searchString + @"(?=\w)"; 
+0

伟大的错字,我从来没有注意到......那些是最糟糕的。谢谢。 – Wannabe

+0

其实,如果我没有看到你的方法存在一些潜在的瓶颈,我就不会发布答案。我希望我的补充解释能够有所帮助。快乐的编码! –

+1

再次感谢您的补充说明。 – Wannabe