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#中的动态文本[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C#判断页面中的多个文本框输入值是否有重复的实现方法

如何动态更改多个TextView中的文本? [重复]

C#中的特殊字符打印[重复]

使用 Jquery 在动态事件中获取文本 [重复]

使用 C# 和 Linq 动态生成 kml 文件 [重复]

将动态json模型转换为c#对象[重复]