【问题标题】:C# Regex Replace similar wordsC# Regex 替换相似词
【发布时间】:2017-01-31 18:59:43
【问题描述】:

需要替换表达式中名为[WORD, WORD1, WORD2,..., WORDnnn] 的操作数:

WORD-WORD1+WORD11

操作数命名为:

[WORD_NEW, WORD1_NEW, WORD2_NEW, WORDnnn_NEW]

一些操作数没有被映射,那些不应该被替换。

WORD-WORD1+WORD11 => WORD_NEW-WORD1_NEW+WORD11_NEW
WORD-WORD1+WORD11 => WORD_NEW-WORD1_NEW+WORD11 if WORD11 is not mapped.

【问题讨论】:

  • 为什么不直接使用string.Replace()
  • 所以你想让我们为你做这件事吗?您为什么不向我们展示您迄今为止所做的尝试?
  • string.Replace 不起作用。考虑 string.Replace("WORD","WORD_NEW")。它将替换所有操作数中的“WORD”。

标签: c# regex replace


【解决方案1】:

由于您已经有了映射(可能是 Dictionary<string,string> 的形式),只需运行 Replace 接受委托并检查每个特定匹配是否存在映射:

var mapping = new Dictionary<string,string>{{"WORD1", "WORD_NEW1"}};
var result = Regex.Replace("WORD-WORD1+WORD11", "WORD\d+", 
  match => mapping.ContainsKey(match.Value)? mapping[match.Value] : match.Value);
// result is "WORD-WORD_NEW1+WORD11"

【讨论】:

    【解决方案2】:

    这应该可行。

    正则表达式:

    (WORD\d*)
    

    替换为:

    $1_NEW
    

    C#代码:

    using System;
    using System.Text.RegularExpressions;
    
    public class Example
    {
        public static void Main()
        {
            string pattern = @"(WORD\d*)";
            string substitution = @"$1_NEW";
            string input = @"WORD, WORD1, WORD2";
            RegexOptions options = RegexOptions.Multiline;
    
            Regex regex = new Regex(pattern, options);
            string result = regex.Replace(input, substitution);
            Console.WriteLine(result);
        }
    }
    

    输出:

    WORD_NEW, WORD1_NEW, WORD2_NEW
    

    见:https://regex101.com/r/2uTCjD/1

    测试一下:http://ideone.com/01Yxng

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-25
      • 1970-01-01
      • 2021-08-19
      • 2018-06-09
      • 2020-09-01
      • 1970-01-01
      • 2018-01-19
      相关资源
      最近更新 更多