2012-12-11 76 views
3

我想查找空格之間的單詞。所以的話,直到第一個空格前,檢索詞正則表達式找到空格之間的單詞或單詞

This is anexampleof what I want應該返回anexampleof如果我的搜索詞是example

我現在有這個表達式"(?:^|\S*\s*)\S*" + searchword + "\S*(?:$|\s*\S*)"但是這給了我一個額外的字在開始和結束後。 '這是一個我想要的樣本' - >返回'是一個示例'

我試圖改變正則表達式,但我並不擅長它.. 我正在使用c#。 Thx尋求幫助。

完整的C#代碼:

MatchCollection m1 = Regex.Matches(content, @"(?:^|\S*\s*)\S*" + searchword + @"\S*(?:$|\s*\S*)", 
           RegexOptions.IgnoreCase | RegexOptions.Multiline); 
+0

好吧,如果你的內容是這樣的,你期望什麼? 「這是我想要的一個例子」或者「這是我想要的例子」或「這是我想要的例子」。你可以在每個這些顯示你的預期輸出是什麼?如果你能說,我需要包含我的關鍵字的單詞足夠簡單嗎?如果關鍵字不包含兩個單詞之間,你期望什麼? :)糾正我,如果我錯了。 – bonCodigo

+1

N.B.如果你使用['+ Regex.Escape(searchword)+'](http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.escape.aspx)替換'+ searchword +'一點都不擔心你的用戶傳遞特殊的正則表達式字符。 – Rawling

回答

3

您只需在最後離開了非捕獲組:

@"\S*" + searchword + @"\S*"; 

由於貪你會得到每個儘可能多的非空格字符儘可能的方面。

此外,非捕獲組的想法不是,它們不包含在匹配中。他們所做的一切都不是爲了獲得次級比賽的捕獲。如果您想檢查,有一些,但不要把它列入了比賽,你想lookarounds

@"(?<=^|\S*\s*)\S*" + searchword + @"\S*(?=$|\s*\S*)" 

然而,這些lookarounds並不真正做到在這種情況下任何東西,因爲\s*\S*滿意一個空字符串(因爲*使兩個字符都是可選的)。但只是爲了進一步參考......如果你想在比賽的邊界做出斷言,這不應該是比賽的一部分......周圍的路要走。

+0

看起來也是這樣。現在我進一步測試自己,我發現這也可以工作,但我認爲你的解決方案更簡單:MatchCollection m1 = Regex.Matches(content,@「(?:^ | \ S * \ s *)」+ searchword + @ 「(?:$ | \ s * \ S *)」, RegexOptions.IgnoreCase | RegexOptions.Multiline);謝謝! – PitAttack76

+0

@ Stieven76如果您的輸入是「這是我想要的一個例子,您的最後一個模式將返回''的一個例子。 –

相關問題