使用正则表达式在文本块周围放置一些东西

时间:2011-12-12 23:41:29

标签: c# .net

我需要一些正则表达式的帮助。 (在.Net 4和C#中)

我需要突出显示一段文字。文本格式化为html所以当我只知道其中的单词时,我正在尝试使用正则表达式来查找块。然后我想在它周围放置span标签:

例如,如果我有:

Now x is y the time z for all <bold>quick</bold> brown x foxes to jump over the lazy dogs back"

我想强调“所有快速棕狐”

我希望我的结果字符串为:

Now x is y the time z for all <span class="MyHighLight"><bold>quick</bold> brown x foxes</span> to jump over the lazy dogs back"

棘手的部分是我需要保留原始文本,只需在其周围添加跨度标签。

我想我会先用我想要找到的字符串中的空格替换?*将其转换为正则表达式。 所有?*快?*棕色?*狐狸

谢谢!

2 个答案:

答案 0 :(得分:1)

static string Yellow(this string body, string match)
{
    string result = body;
    foreach (Match m in Regex.Matches(body, match.Replace(" ", "(\\s*|(<[^>]+>)*)+")))                
        result = result.Replace(m.Value, 
            string.Concat("<span class=yellow>", m.Value, "</span>"));
    return result;
}

string s = "Now x is y the time z for all <bold>quick</bold> brown foxes to jump over the lazy dogs back";
string m = "all quick brown foxes";
Console.WriteLine(s.Yellow(m));

控制台的结果是:
现在x是y的时间z&lt; span class = yellow&gt; all&lt; bold&gt; quick&lt; / bold&gt;棕色狐狸&lt; / span&gt;跳过懒狗回来

答案 1 :(得分:0)

我认为你想要.*?而不是?*,这是无效的。所以:

all.*?quick.*?brown.*?foxes

然而,这有一些问题 - 两者之间可能会有一些问题。你可能想要这样的东西:

all\s*(\<.+?\>)?\s*quick\s*(\<.+?\>)?\s*brown\s*(\<.+?\>)?\s*foxes