C# 将excel函数名/替换excel函数名与另一个函数名匹配的正则表达式
我面临以下问题。。。。 例如,我有一个字符串:C# 将excel函数名/替换excel函数名与另一个函数名匹配的正则表达式,c#,regex,C#,Regex,我面临以下问题。。。。 例如,我有一个字符串: string formula1 = "=SUMME(A1:A6)" string formula2 = "=RUNDEN(SUMME(A6);1)" string formula3 = "=AUFRUNDEN(ABS(RUNDEN(SUMME(A1:A6);2));2)" string formula4 = "=AUFRUNDEN(RUNDEN(ABS(RUNDEN(SUMME(
string formula1 = "=SUMME(A1:A6)"
string formula2 = "=RUNDEN(SUMME(A6);1)"
string formula3 = "=AUFRUNDEN(ABS(RUNDEN(SUMME(A1:A6);2));2)"
string formula4 = "=AUFRUNDEN(RUNDEN(ABS(RUNDEN(SUMME(A1:A6);2));2);2)"
这些是德语版的Excel公式
但是我真的需要用英语把函数名替换成函数名
我考虑过创建一个字典,由德语函数名(键)和英语函数名(值)组成
通过regex查找德语函数名是否合适,以便稍后用英语术语替换它们
不幸的是,我的正则表达式知识不是很好,我很难创建一个与此模式匹配的正则表达式。或者你会以不同的方式解决它
希望到目前为止这是可以理解的。谢谢你的帮助,你可以试试
(?<name>[A-Za-z][A-Za-z0-9]*)\s*\(
演示:
private static Dictionary<string, string> subs =
new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase) {
//TODO: add {Deutsch, English}, pairs here
{ "RUNDEN", "ROUND" },
{ "ABS", "ABS" },
{ "SUMME", "SUM" },
{ "AUFRUNDEN", "ROUNDUP"},
};
private static string ConvertExcel(string formula) {
return Regex.Replace(
formula,
@"(?<name>[A-Za-z][A-Za-z0-9]*)\s*\(",
m => subs.TryGetValue(m.Groups["name"].Value, out var newValue)
? newValue + "("
: m.Value); // do nothing, if translation is not found
}
string[] tests = new string[] {
"=SUMME(A1:A6)",
"=RUNDEN(SUMME(A6);1)",
"=AUFRUNDEN(ABS(RUNDEN(SUMME(A1:A6);2));2)",
"=AUFRUNDEN(RUNDEN(ABS(RUNDEN(SUMME(A1:A6);2));2);2)",
};
var result = string.Join(Environment.NewLine, tests
.Select(test => $"{test,-52} <=> {ConvertExcel(test)}"));
Console.Write(result);
=SUMME(A1:A6) <=> =SUM(A1:A6)
=RUNDEN(SUMME(A6);1) <=> =ROUND(SUM(A6);1)
=AUFRUNDEN(ABS(RUNDEN(SUMME(A1:A6);2));2) <=> =ROUNDUP(ABS(ROUND(SUM(A1:A6);2));2)
=AUFRUNDEN(RUNDEN(ABS(RUNDEN(SUMME(A1:A6);2));2);2) <=> =ROUNDUP(ROUND(ABS(ROUND(SUM(A1:A6);2));2);2)
string[]测试=新字符串[]{
“=总和(A1:A6)”,
“=RUNDEN(总和(A6);1)”,
“=AUFRUNDEN(ABS(RUNDEN(SUMME(A1:A6);2));2)”,
“=AUFRUNDEN(RUNDEN(ABS)(RUNDEN(SUMME(A1:A6);2));2)”,
};
var result=string.Join(Environment.NewLine,tests
.Select(test=>$”{test,-52}{ConvertExcel(test)}”);
控制台。写入(结果);
结果:
private static Dictionary<string, string> subs =
new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase) {
//TODO: add {Deutsch, English}, pairs here
{ "RUNDEN", "ROUND" },
{ "ABS", "ABS" },
{ "SUMME", "SUM" },
{ "AUFRUNDEN", "ROUNDUP"},
};
private static string ConvertExcel(string formula) {
return Regex.Replace(
formula,
@"(?<name>[A-Za-z][A-Za-z0-9]*)\s*\(",
m => subs.TryGetValue(m.Groups["name"].Value, out var newValue)
? newValue + "("
: m.Value); // do nothing, if translation is not found
}
string[] tests = new string[] {
"=SUMME(A1:A6)",
"=RUNDEN(SUMME(A6);1)",
"=AUFRUNDEN(ABS(RUNDEN(SUMME(A1:A6);2));2)",
"=AUFRUNDEN(RUNDEN(ABS(RUNDEN(SUMME(A1:A6);2));2);2)",
};
var result = string.Join(Environment.NewLine, tests
.Select(test => $"{test,-52} <=> {ConvertExcel(test)}"));
Console.Write(result);
=SUMME(A1:A6) <=> =SUM(A1:A6)
=RUNDEN(SUMME(A6);1) <=> =ROUND(SUM(A6);1)
=AUFRUNDEN(ABS(RUNDEN(SUMME(A1:A6);2));2) <=> =ROUNDUP(ABS(ROUND(SUM(A1:A6);2));2)
=AUFRUNDEN(RUNDEN(ABS(RUNDEN(SUMME(A1:A6);2));2);2) <=> =ROUNDUP(ROUND(ABS(ROUND(SUM(A1:A6);2));2);2)
=总和(A1:A6)=总和(A1:A6)
=朗登(总和(A6);1)=四舍五入(总和(A6);1)
=AUFRUNDEN(ABS(RUNDEN(SUMME(A1:A6);2));2)=汇总(ABS(ROUND)(SUMME(A1:A6);2));2)
=AUFRUNDEN(RUNDEN(ABS)(RUNDEN)(SUMME(A1:A6);2));2=ROUND(ABS)(ROUND)(SUM(A1:A6);2));2)