2015-11-16 163 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