我有一个字符串,我正在使用一些占位符来替换一些基于对象的值。
如下所示:
Hello User <#= string#>
我需要找到表达式<#= string #>
,字符串不是静态的。表达式应替换为值。
如何使用正则表达式完成此操作?请帮忙。有很多占位符,字符串实际上是类的属性名称。
答案 0 :(得分:3)
你不应该需要正则表达式,一个简单的替换应该起作用:
string foo = "Hello User <#= UserName #>";
string name = "deepak";
string bar = foo.Replace("<#= UserName #>", name);
结果:
Hello用户deepak
编辑:
您仍然不需要正则表达式来执行此操作:
Dictionary<string, string> placeholders = new Dictionary<string, string>();
placeholders.Add("<#= UserName #>", "deepak");
placeholders.Add("<#= Address #>", "foo address");
placeholders.Add("<#= City #>", "foo city");
placeholders.Add("<#= State #>", "foo state");
placeholders.Add("<#= Zip #>", "foo zip");
string htmlTemplate ="... etc.";
foreach (KeyValuePair<string, string> kvp in placeholders)
{
htmlTemplate = htmlTemplate.Replace(kvp.Key, kvp.Value);
}
您可以选择填充Dictionary<string, string>
答案 1 :(得分:1)
如何为这么多占位符定义如此多的正则表达式,这一点并不好。随着更大的字符串文本更大将是执行时间。尝试使用StringBuilder或string来完成此任务。
System.Text.StringBuilder builder = new System.Text.StringBuilder("sample <#test>");
builder.Replace("<#test>", "test");
builder.ToString()
答案 2 :(得分:1)
如果您需要为各种值而不仅仅是UserName执行此操作,您可以使用:
public void ReplaceStuff(string stuffToReplace, string newStuff){
return originalString.Replace("<#= " + stuffToReplace + " #>", newStuff);
}
答案 3 :(得分:0)
Regex r = new Regex("<#= UserName #>");
string result = r.Replace(input, MyValue);
答案 4 :(得分:-1)
此代码将使用字典中的替换为输入中的每个匹配组:
string input = "Hello <#= UserName #> from <#= City #>. Bye, <#= UserName #>!";
var replacements = new Dictionary<string, string>
{
{ "UserName", "Bob" },
{ "City", "Atlanta" }
};
var result = Regex.Replace(input, @"\<#=\s*(\w+)\s*#\>",
m => replacements[m.Groups[1].Value] );
如果某些键可能无法出现在替换字典中,那么在尝试获取键值之前请先检查:
var result = Regex.Replace(input, @"\<#=\s*(\w+)\s*#\>", m =>
{
string key = m.Groups[1].Value;
if (!replacements.ContainsKey(key))
{
Logger.Warn("Unknown key found: " + key); // Nice to log this case
return m.Groups[0].Value; // throw, return default, or keep unchanged
}
return replacements[key];
});
输出:
"Hello Bob from Atlanta. Bye, Bob!"