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

标签 c# regex string substring

我有一个像这样的字符串:

"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)

并替换为空字符串。

RegEx Demo

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

代码:

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

关于c# - 从字符串中删除背靠背的子字符串,但不是删除所有出现的子字符串 - c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31548424/

相关文章:

c# - 异步 C# 服务器连续从多个套接字读取

c# - 调用泛型类构造函数的困境

c# - 与 wcf REST 通信的 JSON.NET 兼容序列化

c# - 使用 .net 正则表达式替换字符串中的文本

java - 分隔符提取以分号分隔的元素

javascript - 根据正则表达式的属性对对象数组进行排序

string - MATLAB 字符串处理

c# - mvc 中的复选框返回 null

python - 如何检查字符串是否为 rgb 十六进制字符串

c# - 将包含 16 位数字的字符串拆分为 4 组