替换子字符串的值但只有一个

时间:2015-12-15 13:33:29

标签: c# regex string

我需要用另一个字符串替换所有出现的子字符串。但我不想替换主字符串中特定子字符串中子字符串的出现。

示例

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

1 个答案:

答案 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);

enter image description here

请参阅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);