C# 使用正则表达式将插值字符串转换为string.Format
我和我的同事有不同版本的VisualStudio。他使用插值字符串,我无法构建解决方案,必须将它们全部转换为string.Format 现在我想这对regex来说可能是一个很好的锻炼 那么,如何将其转换为:C# 使用正则表达式将插值字符串转换为string.Format,c#,regex,C#,Regex,我和我的同事有不同版本的VisualStudio。他使用插值字符串,我无法构建解决方案,必须将它们全部转换为string.Format 现在我想这对regex来说可能是一个很好的锻炼 那么,如何将其转换为: $"alpha: {alphaID}, betaValue: {beta.Value}" 为此: string.Format("alpha: {0}, betaValue: {1}", alphaID, beta.Value) 现在变量的数量可以变化,比如说1-20,但是应该是通用的 我
$"alpha: {alphaID}, betaValue: {beta.Value}"
为此:
string.Format("alpha: {0}, betaValue: {1}", alphaID, beta.Value)
现在变量的数量可以变化,比如说1-20,但是应该是通用的
我用这个正则表达式来匹配第一个变量
\$.*?{(\w+)}
但是我不知道如何重复美元符号后的部分,所以我可以重复结果。我没有c语言的经验,但这可能会帮助您:
\{.+}\gU
解释
{与字符{字面上匹配
.匹配除换行符以外的任何字符
量词:+在一次和无限次之间,尽可能少的次数,
根据需要扩展[懒惰]
}逐字匹配字符}
g修饰语:全局。所有比赛不会在第一场比赛中返回
U修饰符:Ungreedy我没有c语言的经验,但这可能会帮助您:
\{.+}\gU
解释
{与字符{字面上匹配
.匹配除换行符以外的任何字符
量词:+在一次和无限次之间,尽可能少的次数,
根据需要扩展[懒惰]
}逐字匹配字符}
g修饰语:全局。所有比赛不会在第一场比赛中返回
U modifier:Ungreedy这里有几个不涉及正则表达式的选项: 您可以使用ReSharper。它内置了这样的转换。 如果您不想为ReSharper付费,请与Roslyn一起编写自定义代码修复程序。从string.format到插值字符串,您只需将其反转即可 手动操作 如果可以的话,请你的同事帮你做这件事。 更新VS
以下是几个不涉及正则表达式的选项: 您可以使用ReSharper。它内置了这样的转换。 如果您不想为ReSharper付费,请与Roslyn一起编写自定义代码修复程序。从string.format到插值字符串,您只需将其反转即可 手动操作 如果可以的话,请你的同事帮你做这件事。 更新VS Replace有一个重载,它使用一个名为MatchEvaluator的函数。你可以这样使用它
var paramNumber = 0;
var idNames = new List<string>();
myCSharpString = Regex.Replace(myCSharpString, match => {
// remember the id inside brackets;
idNames.Add(match.ToString());
// return "0", then "1", etc.
return (paramNumber++).ToString();
});
在这个过程结束时,像这样的字符串is{foo}not{bar}将被替换为this{0}not{1},并且您将拥有一个包含{foo,bar}的列表,您可以使用它来组装参数列表 Regex.Replace有一个重载,它使用一个名为MatchEvaluator的函数。你可以这样使用它
var paramNumber = 0;
var idNames = new List<string>();
myCSharpString = Regex.Replace(myCSharpString, match => {
// remember the id inside brackets;
idNames.Add(match.ToString());
// return "0", then "1", etc.
return (paramNumber++).ToString();
});
在这个过程结束时,像这样的字符串is{foo}not{bar}将被替换为this{0}not{1},并且您将拥有一个包含{foo,bar}的列表,您可以使用它来组装参数列表 您可以在较旧版本的visual studio中使用C6功能 本质上,只是使用
Install-Package Microsoft.Net.Compilers
在所有项目上。您可以在较旧版本的visual studio中使用C6功能 本质上,只是使用
Install-Package Microsoft.Net.Compilers
在所有项目上。您知道您还需要考虑{{和}}文字大括号吗?这不是正则表达式解析代码的最佳工作。相关:也告诉他配置他的VS版本,这样代码就不会使用C6特性。这是可能的。像string.Format$alpha:{alphaID},{0},betaValue:{1}{beta.Value},varOne,varTwo这样的东西应该如何处理?你知道你还需要考虑{{和}}文字大括号吗?这不是正则表达式解析代码的最佳工作。相关:也告诉他配置他的VS版本,这样代码就不会使用C6特性。这是可能的。像字符串.Format$alpha:{alphaID},{0},betaValue:{1}{beta.Value},varOne,varTwo这样的东西应该如何处理?我认为这种格式错误的PCRE正则表达式在C中没有多大帮助。没关系,我可以在notepad++或其他正则表达式替代工具中输入代码并运行它。我将去掉\gU并在加号后插入惰性运算符。我不认为这个格式错误的PCRE正则表达式在C中有多大帮助。没关系,我可以在notepad++或其他正则表达式替换工具中输入代码并运行它。我将删除\gU并在加号后插入惰性运算符。