C# 如何替换字符串中的变量

The*_*Pan 1 c# string.format

string name = "name1";
string country = "country1";
string greet = "Hi {name}, Are you from {country}";
Run Code Online (Sandbox Code Playgroud)

我从数据库字符串中获取了带有一些变量的字符串。我知道string.format()或者$""更换,但这解决不了。

我想要得到的结果就像

string result = $"Hi {name}, Are you from {country}";
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到这个?

Kar*_*ooz 5

你可以这样做:

string name = "name1";
string country = "country1";
string result = String.Format("Hi {0}, Are you from {1}",name, country);
Run Code Online (Sandbox Code Playgroud)

或者如果你想使用String.Replace

string name = "name1";
string country = "country1";
string result = greet.Replace("{name}",name).Replace("{country}",country);
Run Code Online (Sandbox Code Playgroud)

如果你想使用$

var name = "name1";
var country = "country1";
var result = $"Hi {name}, Are you from {country}";
Run Code Online (Sandbox Code Playgroud)


Dmi*_*nko 5

您可以在正则表达式的帮助下尝试Replace所有操作:{...}

  using System.Text.RegularExpressions;

  ...

  // All possible substitutions (from database?)
  Dictionary<string, string> replacements = 
    new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase) {
      { "name", "name1"},
      { "country", "country1"},
  };

  string greet = "Hi {name}, Are you from {country}";

  string result = Regex.Replace(
      greet,
    @"(?<=\{).*?(?=\})",
      match => replacements.TryGetValue(match.Value, out var value) ? value : "???");
Run Code Online (Sandbox Code Playgroud)

编辑:如果你想删除{..,}你可以稍微修改一下正则表达式:

string result = Regex.Replace(
   greet,
 @"\{(?<name>.*?)\}",
   match => replacements.TryGetValue(match.Groups["name"].Value, out var value) ? value : "???");   
Run Code Online (Sandbox Code Playgroud)