C# 从字符串中删除背对背的子字符串,但不删除所有出现的子字符串-c

C# 从字符串中删除背对背的子字符串,但不删除所有出现的子字符串-c,c#,regex,string,substring,C#,Regex,String,Substring,我有一个字符串,比如: 水-水ASDF FDSA 以及以下字符串: 水-水ASDF FDSA水 我只需要删除背对背子字符串的第一个实例,以便这两种情况成为: 水ASDF FDSA和水ASDF FDSA水 我想做的是: List<string> substrings = FindSubstrings(returnString); IEnumerable<string> duplicateItems = from x in substrings

我有一个字符串,比如:

水-水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上没有索引。有什么好办法吗?

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

\b(\w+)\s+(?=\1)
并替换为空字符串

?=\1是正向前瞻,确保使用\w+捕获的单词重复

代码:


1你们有水ASDF FDSA吗?如果是,您希望获得什么输出?水-水ASDF FDSA还是水ASDF FDSA?如果您有文本Water Water ASDF FDSA,是否应将其转换为文本Water ASDF FDSA?Water Water Water ASDF FDSA->Water ASDF FDSA。是的,我想你有答案了。
string repl = Regex.Replace(input, @"\b(\w+)\s+(?=\1)", "");