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