如何在 C# 中使用正则表达式有条件地匹配和替换语句中的单词
How to conditionally match and replace words in a statement using regex in C#
我想知道是否有任何方法可以在 RegEx 中替换“switch”。
例如,字符串:
round square unknown liquid
模式是:\w+
和假想的替换类似:
if (round) then "Ball" else if (square) then "Box" else if (liquid)
then "Water" else if (hot) then "Fire"
结果会是
Ball Box unknown Water
我们的想法是仅使用模式和替换,而不使用任何 C# 代码。
细节或清晰度:
var Text = "round square unknown liquid";
var Pattern = @"\w+";
var Replacement = @"if (round) then Ball else if (square) then Box else if (liquid) then Water else if (hot) then Fire"; // <-- is this somehow possible?
var Result = new Regex(Pattern).Replace(Text, Replacement);
Console.WriteLine(Result);
预期输出:
Ball Box unknown Water
这确实是不可能的,你不应该为它不可能而烦恼。
是否可以只用纸建造一艘潜艇?不需要。只需要添加一些成分。
但如果不是因为“唯一的纯正则表达式”约束,这就是我会做的:
var dictionaryReplace = new Dictionary<string, string>
{
{"round","Ball"},
{"square","Box"},
{"liquid","Water"},
{"hot","Fire"},
};
var Text = "round square unknown liquid";
var Pattern = $"({string.Join("|", dictionaryReplace.Keys)})"; //(round|square|liquid|hot)
var Result = new Regex(Pattern).Replace(Text, x => dictionaryReplace[x.Value]);
Console.WriteLine(Result); //Ball Box unknown Water
我想知道是否有任何方法可以在 RegEx 中替换“switch”。
例如,字符串:
round square unknown liquid
模式是:\w+
和假想的替换类似:
if (round) then "Ball" else if (square) then "Box" else if (liquid) then "Water" else if (hot) then "Fire"
结果会是
Ball Box unknown Water
我们的想法是仅使用模式和替换,而不使用任何 C# 代码。
细节或清晰度:
var Text = "round square unknown liquid";
var Pattern = @"\w+";
var Replacement = @"if (round) then Ball else if (square) then Box else if (liquid) then Water else if (hot) then Fire"; // <-- is this somehow possible?
var Result = new Regex(Pattern).Replace(Text, Replacement);
Console.WriteLine(Result);
预期输出:
Ball Box unknown Water
这确实是不可能的,你不应该为它不可能而烦恼。
是否可以只用纸建造一艘潜艇?不需要。只需要添加一些成分。
但如果不是因为“唯一的纯正则表达式”约束,这就是我会做的:
var dictionaryReplace = new Dictionary<string, string>
{
{"round","Ball"},
{"square","Box"},
{"liquid","Water"},
{"hot","Fire"},
};
var Text = "round square unknown liquid";
var Pattern = $"({string.Join("|", dictionaryReplace.Keys)})"; //(round|square|liquid|hot)
var Result = new Regex(Pattern).Replace(Text, x => dictionaryReplace[x.Value]);
Console.WriteLine(Result); //Ball Box unknown Water