2015-07-21 73 views
2

我有一個字符串,如:刪除回從字符串返回子,但不是所有的實例 - C#

「水水ASDF FDSA」

以及像字符串:

「水水ASDF FDSA水」

我只需要刪除回來的第一個實例來支持子,使這兩個案件成爲:

「水ASDF FDSA」和「水ASDF FDSA水」

我試圖這樣做:

 List<string> substrings = FindSubstrings(returnString); 
     IEnumerable<string> duplicateItems = from x in substrings 
          group x by x into grouped 
          where grouped.Count() > 1 
          select grouped.Key; 

所以我有一個單獨的FindSubstrings方法返回一個包含原始字符串的所有子字符串的列表。然後,我(從我在網上找到的)找到重複的方法,將它們的列表放置在IEnumerable中。

是去了解這個然後做這樣的事情的最好方法:

 for (int i = 0; i < substrings.Count; i++) 
     { 
      //if duplicateItems contains the substring and substring[i+1] is also the same item, then remove it) 
     } 

的問題是我不能得到duplicateItems字符串,如果它包含一個以上的重複子監守沒有索引過的IEnumerable的。任何想法最好的方式來做到這一點?

+0

1)你有'水水水ASDF FDSA'?如果是的話,你希望得到什麼輸出? '水水ASDF FDSA'或'水ASDF FDSA'? 2)如果你有「Text Water Water ASDF FDSA」,它應該變成「Text Water ASDF FDSA」嗎? –

+0

水水ASDF FDSA - >水ASDF FDSA。是的 – Pipeline

+0

然後,我想,你有一個答案。 –

回答

2

您可以搜索使用正則表達式:

\b(\w+)\s+(?=\1) 

,並用空字符串替換。

RegEx Demo

(?=\1)是正向前查找,使得確保有字的重複使用(\w+)被抓獲。

代碼:

string repl = Regex.Replace(input, @"\b(\w+)\s+(?=\1)", "");