在C#中replace第二次跳过第一场比赛

我有一个string有2个相似的单词..我想代替2秒的单词,但不是第一个..任何帮助?

你可以使用正则表达式和逆序。

var replaceHello = "ABC hello 123 hello 456 hello 789"; var fixedUp = Regex.Replace(replaceHello, "(?<=hello.*)hello", "goodbye"); 

除了第一个例外,这将会把“hello”这个词的所有例子都替换成“goodbye”。

正则Regex版本很简洁,但是如果你不喜欢使用正则表达式,那么可以考虑更多的代码。

StringBuilder类提供了一种在给定子字符串内进行替换的方法。 在string这个扩展方法中,我们将指定一个从第一个适用的匹配结束开始的子字符串。 一些对论据的基本验证已经到位,但我不能说我已经测试了所有的组合。

 public static string SkipReplace(this string input, string oldValue, string newValue) { if (input == null) throw new ArgumentNullException("input"); if (string.IsNullOrEmpty(oldValue)) throw new ArgumentException("oldValue"); if (newValue == null) throw new ArgumentNullException("newValue"); int index = input.IndexOf(oldValue); if (index > -1) { int startingPoint = index + oldValue.Length; int count = input.Length - startingPoint; StringBuilder builder = new StringBuilder(input); builder.Replace(oldValue, newValue, startingPoint, count); return builder.ToString(); } return input; } 

使用它:

 string foobar = "foofoo".SkipReplace("foo", "bar");