正则表达式替换标记代码C#

正则表达式替换标记代码C#,c#,regex,C#,Regex,好吧,我对正则表达式还是相当缺乏经验,所以我希望有人能帮我 在网站上,我们有一种简单的标记语言,用于在模板中放置特定字段和值 它可以像以下任何一种: [%FieldName] [%FieldName.Value] [%FieldName.Text] [%FieldName.Value_YesNo] 我可以换那些没问题。但是,如果某个字段没有值,它最终会破坏图像,显示实际上不在任何地方的链接,等等。我尝试用以下方法来实现它: [? <a href="[%FieldName.Value]"&

好吧,我对正则表达式还是相当缺乏经验,所以我希望有人能帮我

在网站上,我们有一种简单的标记语言,用于在模板中放置特定字段和值

它可以像以下任何一种:

[%FieldName]
[%FieldName.Value]
[%FieldName.Text]
[%FieldName.Value_YesNo]
我可以换那些没问题。但是,如果某个字段没有值,它最终会破坏图像,显示实际上不在任何地方的链接,等等。我尝试用以下方法来实现它:

[? <a href="[%FieldName.Value]">[%FieldName.Value]</a> ?]
[[\[\?.\[%FieldName.*\].\?\]]+]
与我尝试过的类似

此外,我还尝试用括号、引号和任何东西来围绕
FieldName
,试图匹配整个单词,而不仅仅是其中的字母

有什么想法吗

我还应该指出,我也以各种方式尝试了
\b
标志

我已经有了处理填写字段信息的代码:

listingTemplate = listingTemplate.Replace("[%" + df.FieldName + "]", df.FieldText + ": " + df.Value.Replace("|", ", "));
listingTemplate = listingTemplate.Replace("[%" + df.FieldName + ".Text]", df.FieldText);
if (df.FieldType == FieldTypes.CheckboxSingle && df.Value.Length > 0)
    listingTemplate = listingTemplate.Replace("[%" + df.FieldName + ".Value]", df.FieldText);
else if (df.FieldType != FieldTypes.CheckboxSingle)
    listingTemplate = listingTemplate.Replace("[%" + df.FieldName + ".Value]", df.Value.Replace("|", ", ").Nl2Br());
listingTemplate = listingTemplate.Replace("[%" + df.FieldName + ".Value_YesNo]", (df.Value.Length > 0 ? "Yes" : "No"));
这与预期一样有效,但如果,
FacebookURL
没有值,它仍会显示:

<div class="dimage"><img src="/uploads/[%Logo.Value]" /></div>
<h5>[%Name]</h5>
<div class="item">[%Address.Value]</div>
<div class="item">[%Telephone]</div>
<div class="items"><span class="item d-btn"><a href="mailto:[%Email.Value]">E-Mail</a></span> <span class="item d-btn"><a href="[%URL.Value]">Website</a></span> <span class="item d-btn"><a href="[%Video.Value]">Watch Video</a></span> <span class="item d-btn"><a href="[%BrochureURL.Value]">Brochure</a></span> <span class="item d-btn"><a href="[%ReprintURL]">Reprint</a></span> <span class="item d-btn"><a href="[%FacebookURL.Value]">Facebook</a></span> <span class="item d-btn"><a href="[%TwitterURL.Value]">Twitter</a></span></div>
<div class="item">[%Waterway]</div>
<div class="notes">[%DateAdded]</div>

[%Name]
[%Address.Value]
[%电话]
[%水道]
[%DateAdd]
这就是我遇到问题的地方:

<div class="head">
<div class="dimage">[?<img src="/uploads/[%Logo.Value]" />?]</div>
<h5>[%Name]</h5>
</div>
[? <div class="item">[%Address.Value]</div> ?]
[? <div class="item">[%Telephone]</div> ?]
<div class="items">[?<span class="item d-btn"><a href="mailto:[%Email.Value]">E-Mail</a></span>?] [?<span class="item d-btn"><a href="[%URL.Value]">Website</a></span>?] [?<span class="item d-btn"><a href="[%Video.Value]">Watch Video</a></span>?] [?<span class="item d-btn"><a href="[%BrochureURL.Value]">Brochure</a></span>?] [?<span class="item d-btn"><a href="[%ReprintURL.Value]">Reprint</a></span>?] [?<span class="item d-btn"><a href="[%FacebookURL.Value]">Facebook</a></span>?] [?<span class="item d-btn"><a href="[%TwitterURL.Value]">Twitter</a></span>?]</div>
<div class="notes">[%DateAdded]</div>

[??]
[%Name]
[?[%Address.Value]?]
[?[%电话]?]
[??] [??] [??] [??] [??] [??] [??]
[%DateAdd]
如果
FacebookURL
是空值,我希望周围的
[??]
允许我完全删除该字段。

使用.Net,它可以允许您自定义通过regex replace中的C#code实际替换的内容。以下是一个例子:

string data = @"[? <a href=""[%FieldName.Value]"">[%FieldName.Text]</a> ?]";

var pattern = @"\[%FieldName\.(?<Keyword>[^\]]+)\]";

Console.WriteLine (Regex.Replace(data, pattern, (mtch) =>
{

    switch (mtch.Groups["Keyword"].Value)
    {
        case "Value"       : return "http://omegacoder.com"; break;
        case "Text"        : return "OmegaMan's Musings";    break;
        case "Value_YesNo" : return "Yes No";                break;
    }

    return string.Empty
     ;
}));

/* result of WriteLine
[? <a href="http://omegacoder.com">OmegaMan's Musings</a> ?]
*/
字符串数据=@“[??]”;
变量模式=@“\[%FieldName\.(?[^\]]+)\]”;
Console.WriteLine(Regex.Replace(数据,模式,(mtch)=>
{
开关(mtch.Groups[“关键字”].值)
{
案例“值”:返回http://omegacoder.com“休息;
案例“文本”:返回“欧米伽曼的沉思”;中断;
案例“Value_YesNo”:返回“Yes No”;中断;
}
返回字符串。空
;
}));
/*写线结果
[?  ?]
*/

使用regex是否有令人信服的原因?另外,不要把你的谷歌搜索放在你问题的标题中;“把你的实际问题的摘要放在那里。”罗伯塔维,如果我能想出一个更简单的方法来使用它的话。如果你知道一个更好的解决方案,我洗耳恭听。@ahwm你能给我们一个工作和非工作标签混合的前后示例,以及你期望会发生什么吗?我编辑了一些内容,包括了更多内容。我已经准备好了这方面的代码。我想弄清楚的是,除了删除“条件”开头和结尾之外,如何在不影响任何其他条件字段的情况下删除其中的所有内容。
string data = @"[? <a href=""[%FieldName.Value]"">[%FieldName.Text]</a> ?]";

var pattern = @"\[%FieldName\.(?<Keyword>[^\]]+)\]";

Console.WriteLine (Regex.Replace(data, pattern, (mtch) =>
{

    switch (mtch.Groups["Keyword"].Value)
    {
        case "Value"       : return "http://omegacoder.com"; break;
        case "Text"        : return "OmegaMan's Musings";    break;
        case "Value_YesNo" : return "Yes No";                break;
    }

    return string.Empty
     ;
}));

/* result of WriteLine
[? <a href="http://omegacoder.com">OmegaMan's Musings</a> ?]
*/