我有一个像这样的字符串:
"Water Water ASDF FDSA"
以及像这样的字符串:
"Water Water ASDF FDSA Water"
我只需要删除背靠背子字符串的第一个实例,以便这两种情况变为:
"Water ASDF FDSA" and "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 方法,它返回一个包含原始字符串中所有子字符串的列表。然后我(从网上找到了)一种检测重复项的方法,将它们的列表放置在 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)
}
问题是,如果重复项包含多个重复子字符串,我无法从重复项中获取该字符串,因为 IEnumerable 上没有索引。关于最好的方法有什么想法吗?
最佳答案
您可以使用正则表达式进行搜索:
\b(\w+)\s+(?=\1)
并替换为空字符串。
(?=\1)
是正向前瞻,确保使用 (\w+)
捕获的单词重复。
代码:
string repl = Regex.Replace(input, @"\b(\w+)\s+(?=\1)", "");
关于c# - 从字符串中删除背靠背的子字符串,但不是删除所有出现的子字符串 - c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31548424/