加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 06:30:38 所属栏目:百科 来源:网络整理
导读:我想在两个命名的捕获组之间的特定位置插入一个美元符号.问题是,这意味着两个紧跟在替换字符串中的美元符号之后会导致问题. 我如何使用Replace-method直接执行此操作?我只是通过添加一些我立即删除的临时垃圾找到了一种解决方法. 请参阅问题的代码: // We
我想在两个命名的捕获组之间的特定位置插入一个美元符号.问题是,这意味着两个紧跟在替换字符串中的美元符号之后会导致问题.

我如何使用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}”

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读