用实际的类属性替换变量名称 - 正则表达式? (C#)

时间:2017-03-17 20:43:36

标签: regex variables replace format

我需要向列表中的每个用户发送自定义电子邮件(List< User>)。 (我正在使用C#.NET) 我需要做的是用实际的User属性值替换所有表达式(以[?& =“has”variableName“开头,然后以”]“结尾)。

例如,如果我有这样的文字:

    "Hello, [?&=Name]. A gift will be sent to [?&=Address], [?&=Zipcode], [?&=Country]. 
If [?&=Email] is not your email address, please contact us."

我想为用户提供此信息:

    "Hello, Mary. A gift will be sent to Boulevard Spain 918, 11300, Uruguay. 
If marytech@gmail.com is not your email address, please contact us."

使用Regex是否有实用且干净的方法?

1 个答案:

答案 0 :(得分:0)

这是应用正则表达式的好地方。

您想要的正则表达式如下/\[\?&=(\w*)\]/ example

您需要使用允许您使用自定义函数替换值的方法对输入字符串进行替换。然后在该函数内部使用第一个捕获值作为Key,以便说出并提取正确的相应值。

由于你没有指定你正在使用的语言,我会很高兴,并在最近为我自己的项目提供C#和JS的例子。

伪代码

Loop through matches
Key is in first capture group
Check if replacements dict/obj/db/... has value for the Key
   if Yes, return Value
   else return ""

C#

email = Regex.Replace(email, @"\[\?&=(\w*)\]",
                match => //match contains a Key & Replacements dict has value for that key
                    match?.Groups[1].Value != null 
                    && replacements.ContainsKey(match.Groups[1].Value)
                        ? replacements[match.Groups[1].Value]
                        : "");

JS

var content = text.replace(/\[\?&=(\w*)\]/g,
        function (match, p1) {

            return replacements[p1] || "";

        });