Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用C的正则表达式将输入映射到多个替换值#_C#_Regex - Fatal编程技术网

C# 如何使用C的正则表达式将输入映射到多个替换值#

C# 如何使用C的正则表达式将输入映射到多个替换值#,c#,regex,C#,Regex,我有两个输入值: 苹果 胡萝卜 我想找到一个正则表达式,我可以在C#程序中使用Regex.Replace()来识别这些输入,并用不相关的值替换它们。我没有机会更改代码。我只能提供输入、模式和替换参数 例如: 如果发现苹果,则替换为水果 如果发现胡萝卜,则替换为蔬菜 我可以很容易地将它们与^apple | tomato$相匹配,但我看不出有什么办法可以替代我想要的。替换的唯一选项似乎是来自输入或单个固定值的内容。不管使用正则表达式,它都是映射,您可以像下面那样完成它 Dictionary<s

我有两个输入值:

苹果

胡萝卜

我想找到一个正则表达式,我可以在C#程序中使用Regex.Replace()来识别这些输入,并用不相关的值替换它们。我没有机会更改代码。我只能提供输入、模式和替换参数

例如:

如果发现苹果,则替换为水果

如果发现胡萝卜,则替换为蔬菜


我可以很容易地将它们与^apple | tomato$相匹配,但我看不出有什么办法可以替代我想要的。替换的唯一选项似乎是来自输入或单个固定值的内容。

不管使用正则表达式,它都是映射,您可以像下面那样完成它

Dictionary<string, List<string>> dic = new Dictionary<string, List<string>>()
{
    {"fruit",new List<string>{"apple","orange"}},
    {"vegetable",new List<string>{"carrot"}}
};
Func<string, string> func = (inputStr) =>
{
    var query = dic.FirstOrDefault(x => x.Value.Any(y => string.Equals(y, inputStr, StringComparison.OrdinalIgnoreCase)));
    return query.Key;
};
Console.WriteLine(func("apple"));
Console.WriteLine(func("carrot"));
Console.WriteLine(func("nothing")==null);
Dictionary dic=新字典()
{
{“水果”,新列表{“苹果”,“橘子”},
{“蔬菜”,新列表{“胡萝卜”}
};
Func Func=(inputStr)=>
{
var query=dic.FirstOrDefault(x=>x.Value.Any(y=>string.Equals(y,inputStr,StringComparison.OrdinalIgnoreCase));
返回query.Key;
};
控制台写入线(func(“苹果”));
控制台写入线(func(“carrot”);
Console.WriteLine(func(“nothing”)==null);

不幸的是,单用一个正则表达式替换无法做到这一点。无法更改模式本身中捕获组的值,也无法“硬编码”模式中组的值

但是,如果应用程序允许您提供多个将连续执行的模式/替换对,那么您可以通过向对提供:

  • 第1对
    • 模式:
      ^apple$
    • 替换:
      水果
  • 第2对
    • 图案:
      ^番茄$
    • 替换:
      蔬菜

您有权访问Regex.Replace的哪些方法签名?你有权访问这个:公共静态字符串替换(字符串输入,字符串模式,MatchEvaluator求值器)没有,我们没有使用MatchEvaluator。我唯一的选择是在一个配置文件中提供正则表达式和替换字符串,并希望有一些正则表达式魔术可以让我避免修改产品代码和发明一些描述此配置的方法。似乎我们需要在下一个版本中添加一些内容。