用正则表达式替换C#美元问题

前端之家收集整理的这篇文章主要介绍了用正则表达式替换C#美元问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在两个命名的捕获组之间的特定位置插入一个美元符号.问题是,这意味着两个紧跟在替换字符串中的美元符号之后会导致问题.

我如何使用Replace-method直接执行此操作?我只是通过添加一些我立即删除的临时垃圾找到了一种解决方法.

请参阅问题的代码

  1. // We want to add a dollar sign before a number and use named groups for capturing;
  2. // varying parts of the strings are in brackets []
  3. // [somebody] has [some-dollar-amount] in his [something]
  4.  
  5. string joeHas = "Joe has 500 in his wallet.";
  6. string jackHas = "Jack has 500 in his pocket.";
  7. string jimHas = "Jim has 740 in his bag.";
  8. string jasonHas = "Jason has 900 in his car.";
  9.  
  10. Regex dollarInsertion = new Regex(@"(?<start>^.*? has )(?<end>\d+ in his .*?$)",RegexOptions.Multiline);
  11.  
  12. Console.WriteLine(joeHas);
  13. Console.WriteLine(jackHas);
  14. Console.WriteLine(jimHas);
  15. Console.WriteLine(jasonHas);
  16. Console.WriteLine("--------------------------");
  17.  
  18. joeHas = dollarInsertion.Replace(joeHas,@"${start}$${end}");
  19. jackHas = dollarInsertion.Replace(jackHas,@"${start}$-${end}");
  20. jimHas = dollarInsertion.Replace(jimHas,@"${start}\$${end}");
  21. jasonHas = dollarInsertion.Replace(jasonHas,@"${start}$kkkkkk----kkkk${end}").Replace("kkkkkk----kkkk","");
  22.  
  23. Console.WriteLine(joeHas);
  24. Console.WriteLine(jackHas);
  25. Console.WriteLine(jimHas);
  26. Console.WriteLine(jasonHas);
  27.  
  28.  
  29.  
  30.  
  31. Output:
  32. Joe has 500 in his wallet.
  33. Jack has 500 in his pocket.
  34. Jim has 740 in his bag.
  35. Jason has 900 in his car.
  36. --------------------------
  37. Joe has ${end}
  38. Jack has $-500 in his pocket.
  39. Jim has \${end}
  40. Jason has $900 in his car.
使用此替换模式:“${start} $$${end}”

double $$转义$,以便将其视为文字字符.第三个$实际上是命名组${end}的一部分.您可以在MSDN Substitutions page上阅读此内容.

我会坚持上述方法.或者,您可以使用接受MatchEvaluator的Replace重载并连接您需要的内容,类似于以下内容

  1. jackHas = dollarInsertion.Replace(jackHas,m => m.Groups["start"].Value + "$" + m.Groups["end"].Value);

猜你在找的正则表达式相关文章