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

标签 c# .net regex

我想在两个命名捕获组之间的特定位置插入一个美元符号。问题在于,这意味着替换字符串中的两个美元符号紧随其后,这会导致问题。

我怎样才能直接用 Replace-method 做到这一点?我只是通过添加一些我立即再次删除的临时垃圾找到了解决方法。

问题见代码:

      // We want to add a dollar sign before a number and use named groups for capturing;
      // varying parts of the strings are in brackets []
      // [somebody] has [some-dollar-amount] in his [something]

      string joeHas = "Joe has 500 in his wallet.";
      string jackHas = "Jack has 500 in his pocket.";
      string jimHas = "Jim has 740 in his bag.";
      string jasonHas = "Jason has 900 in his car.";

      Regex dollarInsertion = new Regex(@"(?<start>^.*? has )(?<end>\d+ in his .*?$)", RegexOptions.Multiline);

      Console.WriteLine(joeHas);
      Console.WriteLine(jackHas);
      Console.WriteLine(jimHas); 
      Console.WriteLine(jasonHas);
      Console.WriteLine("--------------------------");

      joeHas = dollarInsertion.Replace(joeHas, @"${start}$${end}");
      jackHas = dollarInsertion.Replace(jackHas, @"${start}$-${end}");          
      jimHas = dollarInsertion.Replace(jimHas, @"${start}\$${end}");
      jasonHas = dollarInsertion.Replace(jasonHas, @"${start}$kkkkkk----kkkk${end}").Replace("kkkkkk----kkkk", "");

      Console.WriteLine(joeHas);
      Console.WriteLine(jackHas);
      Console.WriteLine(jimHas);
      Console.WriteLine(jasonHas);




Output:
Joe has 500 in his wallet.
Jack has 500 in his pocket.
Jim has 740 in his bag.
Jason has 900 in his car.
--------------------------
Joe has ${end}
Jack has $-500 in his pocket.
Jim has \${end}
Jason has $900 in his car.

最佳答案

使用此替换模式:"${start}$$${end}"

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

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

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

关于正则表达式替换的 C# 美元问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4338464/

相关文章:

javascript - 如果字符串至少包含一个 "<"或一个 "{",如何在 JS 中构建匹配字符串的正则表达式模式?

mysql - 从我的正则表达式中得到错误 'repetition-operator operand invalid'

c# - 如何在多个用户之间切换服务帐户

c# - gridView 内动态创建的按钮未触发行命令事件

c# - 在 datagridview 中选择一个单元格并开始编辑

c# - RichTextBox 控件仅使用第一种格式

c# - WCF 客户端代理初始化

c# - WCF 配置 hell ?

c# - 访问嵌套母版页代码中的顶级母版页属性

javascript - 如果没有组返回结果,如何构建不返回空字符串的正则表达式