C#中的动态文本[重复]
Posted
技术标签:
【中文标题】C#中的动态文本[重复]【英文标题】:Dynamic text in C# [duplicate] 【发布时间】:2021-01-15 01:38:55 【问题描述】:给定一个函数object GetValue(string key)
作为数据存储端点,我希望能够做到以下几点:
文本示例:Deals [damageMin]-[damageMax] damage to target
输出示例:Deals 1-2 damage to target
。
查找和替换所有[varName]
实例的好方法是什么?
我猜想使用正则表达式,但不确定。任何帮助表示赞赏。
【问题讨论】:
见string.Replace
。在这里提问之前,您至少应该尝试某事。
也许字符串插值可以完成这项工作:docs.microsoft.com/en-us/dotnet/csharp/language-reference/…
第一行的函数如何发挥作用?
抱歉,我想捕获所有 [varName] 实例,因为 damageMin 只是一个示例。键可以是任何字符串
你需要用方括号来表示插入还是那样灵活?
【参考方案1】:
一种选择是存储插入字典:
var inserts = new Dictionary<string, string>
["damageMin"] = "1",
["damageMax"] = "2"
;
然后在字符串中使用Regex替换它们:
string template = "Deals damageMin-damageMax damage to target";
string output = Regex.Replace(template,
string.Join("|", inserts.Keys), match => inserts[match.Value]);
这通过创建一个像这样的正则表达式来工作:damageMin|damageMax
,它匹配所有插入并在字典中查找它们的替换。
然后您可以将其包装在一个方法中:
string ApplyInserts(string template, IDictionary<string, string> inserts)
return Regex.Replace(template,
string.Join("|", inserts.Keys), match => inserts[match.Value]);
和
用于表示插入,因为它们在 Regex 中没有特殊含义,不像
[
和 ]
,否则需要转义。
【讨论】:
@Sinatr 否,但他们在 cmets 中声明可以使用任何字符来表示插入。 抱歉,没有阅读所有评论。 有趣,虽然在这种情况下应该预先生成模板,但如果没有预先生成的列表也能做类似的事情会很酷。以上是关于C#中的动态文本[重复]的主要内容,如果未能解决你的问题,请参考以下文章