用CSV搜索单词并用标签替换

时间:2016-04-13 12:35:17

标签: c# html csv razor umbraco

在Umbraco中,我创建了一个字段(supportListItemWordMarking)来输入用户希望在标题f.x中突出显示的单词的csv。

This is a very fine header

用户希望veryheader以红色突出显示

umbraco中的字段将如下所示:

非常,头

我正在尝试制作一个剃刀脚本,以便它会在supportListItemWordMarking字段中输入的字词的标题中查找,然后输出如下内容:

<h1>This is a <span class="red">very</span> fine <span class="red">header</span></h1>

我想出了这个:

  @{
     if(subItem.HasValue("supportListItemWordMarking")) {
        string[] wordMarking = subItem.GetValue("supportListItemWordMarking").ToString().Split(',');                                        
       }
   }

但我不确定这是否是正确的方法,所以我被困住了。

1 个答案:

答案 0 :(得分:1)

我可能会这样做:

var txt = "This is a very fine header";

var wordMarking = new string[] { "very", "header" };

// search for all words using regex
var rx = new Regex(@"(\w+)", RegexOptions.Compiled);

// the text to replace all regex matches with
// any words found will be inserted into {0} using string.Format
var replacementText = "<span class=\"red\">{0}</span>";

var newTxt = rx.Replace(txt, (match) =>
{
    var wordFound = match.Groups[1].Value;

    // check if word should be marked
    if (wordMarking.Contains(wordFound))
    {
        // return the new word with the replacement
        return string.Format(replacementText, wordFound);
    }

    return wordFound;
});

如果列表wordMarking包含许多项,那么您应该使用字典来提高性能。