我需要用另一个字符串替换所有出现的子字符串。但我不想替换主字符串中特定子字符串中子字符串的出现。
示例
string main = "The value for v and p are not v and p"
string replacestring= "v";
main = main.Replace(replacestring,12);
结果
main = The 12alue for 12 and p are not 12 and p
预期结果
main =The value for 12 and p are not v and p.
所以基本上我不是试图跳过第一次出现的子串而是整个子串value
。我不希望它被replacestring
的任何值替换。我试图找到第一次出现的子串value
的索引,然后跳过接下来的4个字符然后替换。但它对我来说不够有效,因为可能会出现多次value
。
答案 0 :(得分:4)
如果您想将第一个 v
替换为整个单词,请使用
var rx1 = new Regex(@"\bv\b");
var t = rx1.Replace("The value for v and p are not v and p", "12", 1);
请参阅Regex.Replace
方法。最后一个1
参数是 count
(替换可以发生的最大次数。)
正则表达式\bv\b
匹配任何带有非字字符(非字母,非数字和非v
s)的_
。
每当您动态构建正则表达式时,请确保
Regex.Escape
方法。因此,请使用
var s = "v";
var rx1 = new Regex(@"\b" + Regex.Escape(s) + @"\b");
// or
// var rx1 = new Regex(string.Format(@"\b{0}\b", Regex.Escape(s)));
var t = rx1.Replace("The value for v and p are not v and p", "12", 1);