我有一个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");