繁体   English   中英

除了第一次出现之外,如何替换字符串中的字符串

[英]How to replace a string in a string except first occurrence

除了第一次出现之外,如何替换字符串中的字符串?

例如C:\\\\Test-Processed\\1-Processed\\2-Processed应该输出

C:\\\\Test-Processed\\1\\2

如下:

string originalStr = "C:\\Test-Processed\\1-Processed\\2-Processed";
string temp = "-Processed";
string str = originalStr.Substring(0, originalStr.IndexOf(temp) + temp.Length);
originalStr = str + originalStr.Substring(str.Length).Replace(temp, "");

originalStr将是:

originalStr = "C:\\Test-Processed\\1\\2"

这里的关键见解是indexOf的存在,它开始在特定点搜索字符串,而不是从开始搜索。 这里: http//msdn.microsoft.com/en-us/library/7cct0x33.aspx

首先,你要使用.indexOf("-Processed")找到的第一个索引-Processed的的字符串中。 记住这个索引。

现在,使用.indexOf("-Processed", index+1)找到的下一个索引-Processed这不是第一次。

重复那个和Substring(nextindex, "-Processed".Length)删除这些额外的实例,直到你找不到为止。

string ReplaceExceptFirst(string text, string search, string replace)
{
    int pos = text.IndexOf(search);
    if (pos < 0)
    {
        return text;
    }

    int strlen = pos + search.Length;
    return text.Substring(0, strlen) +  (text.Substring(strlen)).Replace(search,replace);
}

像这样的东西:

String str = @"C:\\Test-Processed\1-Processed\2-Processed";
System.Console.WriteLine(new Regex("(\\d+)-Processed").Replace(str, "$1"));

将产生C:\\\\Test-Processed\\1\\2 正则表达式假定您要删除的元素始终以一个或多个数字开头。 它会将这些数字放在捕获组中,并仅用数字(1)替换子字符串(示例1-Processed)。

编辑:如果假设失败,您可能想采取@Patashu建议的方法。

这是上面给出的解决方案之一。 (Habib的解决方案和Pintu Paul的参数命名)。 我使用它但后来将函数定义为字符串扩展。


public static class StringExtensions
{
    public static string ReplaceAllButFirst(this string originalStr, string search, string replace)
    {
        string str = originalStr.Substring(0, originalStr.IndexOf(search, System.StringComparison.InvariantCultureIgnoreCase) + search.Length);
        return str + originalStr.Substring(str.Length).Replace(search, replace);  
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM