-1

我有一个字符串,我使用一些占位符将它替换为基于对象的一些值。

如下所示:

Hello User <#= string#>

我需要找到表达式<#= string #>,字符串不是静态的。表达式应替换为一个值。

这怎么能用正则表达式来完成?请帮忙。有这么多占位符,字符串实际上是一个类的属性名。

4

5 回答 5

3

你不应该需要正则表达式来做到这一点,一个简单的替换应该可以工作:

string foo = "Hello User <#= UserName #>";
string name = "deepak";
string bar = foo.Replace("<#= UserName #>", name);

结果是:

你好用户 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>

于 2013-11-06T09:46:25.933 回答
1

你将如何为这么多占位符定义这么多正则表达式,这一点都不好。替换较大的字符串文本将是执行时间。尝试使用 StringBuilder 或 string 来完成这项任务。

System.Text.StringBuilder builder = new System.Text.StringBuilder("sample <#test>");
builder.Replace("<#test>", "test");
builder.ToString()
于 2013-11-06T09:50:37.427 回答
1

如果您需要对各种值执行此操作,而不仅仅是 UserName,您可以使用:

public void ReplaceStuff(string stuffToReplace, string newStuff){
  return originalString.Replace("<#= " + stuffToReplace + " #>", newStuff);
}
于 2013-11-06T09:53:22.663 回答
0
        Regex r = new Regex("<#= UserName #>");
        string result = r.Replace(input, MyValue);
于 2013-11-06T09:46:16.460 回答
-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!"
于 2013-11-06T09:59:51.120 回答