从字符串中删除背靠背但不是所有出现的字符串 - c#

时间:2015-07-21 19:54:03

标签: c# regex string substring

我有一个字符串:

  

"水水ASDF FDSA"

以及类似的字符串:

  

"水水ASDF FDSA水"

我只需要删除背靠背子串的第一个实例,以便这两个案例成为:

  

" Water ASDF FDSA"和#34; Water ASDF FDSA Water"

我试图做的事情:

        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方法,它返回一个包含原始字符串中所有子串的List。然后我(从网上找到)一种方法来检测重复项,其中列表放在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没有索引。有关最佳方法的任何想法吗?

1 个答案:

答案 0 :(得分:2)

您可以使用正则表达式进行搜索:

(?=\1)

并替换为空字符串。

RegEx Demo

(\w+)是一个积极的先行者,可以确保使用string repl = Regex.Replace(input, @"\b(\w+)\s+(?=\1)", ""); 重复捕获这个词。

<强>代码:

{{1}}