我有一个字符串,其中有2个相似的单词..我想要替换2秒的单词而不是第1个单词。有什么帮助?
答案 0 :(得分:1)
您可以使用正则表达式和lookbehind。
var replaceHello = "ABC hello 123 hello 456 hello 789";
var fixedUp = Regex.Replace(replaceHello, "(?<=hello.*)hello", "goodbye");
除了第一个以外,这将用“再见”替换“hello”一词的所有实例。
答案 1 :(得分:0)
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");