好吧,所以我仍然缺乏正则表达式的经验,所以我希望有人可以帮助我。
在网站上,我们提供了一种简单的标记语言,用于在模板中放置特定字段和值。
它看起来像以下任何一种:
[%FieldName]
[%FieldName.Value]
[%FieldName.Text]
[%FieldName.Value_YesNo]
我可以替换那些没问题。但是如果一个特定的字段没有值,它最终会破坏图像,链接显示实际上并没有去任何地方,等等。我尝试用这样的东西来完成它:
[? <a href="[%FieldName.Value]">[%FieldName.Value]</a> ?]
而且,使用Regex.Replace()
我应该可以删除整行。然而,它结束了所有这些。
[? <a href="[%FieldName.Value]">[%FieldName.Value]</a> ?] [? <a href="[%Field2Name.Value]">[%Field2Name.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>
这是我遇到问题的地方:
<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>
如果FacebookURL
为空值,我希望周围的[? ?]
允许我完全删除该字段。
答案 0 :(得分:-1)
使用.Net的match evaluator delegate,它允许您通过正则表达式替换中的C#代码自定义实际替换的内容。这是一个例子:
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> ?]
*/