我有一个字符串:
"水水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没有索引。有关最佳方法的任何想法吗?
答案 0 :(得分:2)
您可以使用正则表达式进行搜索:
(?=\1)
并替换为空字符串。
(\w+)
是一个积极的先行者,可以确保使用string repl = Regex.Replace(input, @"\b(\w+)\s+(?=\1)", "");
重复捕获这个词。
<强>代码:强>
{{1}}