c# - 使用正则表达式将插值字符串转换为 string.Format

标签 c# regex

我和我的同事使用不同版本的 VisualStudio。他使用了内插字符串,但我无法构建解决方案,不得不将它们全部转换为字符串格式。

现在我认为这可能是正则表达式的好练习。

那么如何转换这个:

$"alpha: {alphaID}, betaValue: {beta.Value}"

对此:

string.Format("alpha: {0}, betaValue: {1}", alphaID, beta.Value)

现在变量的数量可以变化(比如 1 - 20,但应该是通用的)

我想出了这个正则表达式来匹配第一个变量

\$.*?{(\w+)}

但我不知道如何重复美元符号后的部分,所以我可以重复结果。

最佳答案

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();
 });

在此过程结束时,您的字符串 "this is {foo} not {bar}" 将被替换为 "this is {0} not {1}" 并且您将拥有一个包含 { "foo", "bar"} 的列表,您可以使用它来组装参数列表。

关于c# - 使用正则表达式将插值字符串转换为 string.Format,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39286392/

相关文章:

c# - Graphics.DrawImage() 在使用 RotateTransform() 时剪辑图像

c# - Silverlight 自定义配置部分

c# - 正则表达式 - 匹配但排除?

c# - 如何使用 C# 在 Selenium WebDriver 中按下 'Esc' 键

c# - 动态添加属性到 <head> 标签 ASP.NET

regex - TCL字符串匹配与正则表达式

javascript - 文本区域的 jQuery 输入过滤器

c# - 英文字符、连字符和下划线的正则表达式

python - 从字符串中删除多个字符(形成一个单词)

c# - 如何以编程方式向现有 GridView 添加附加列?