我需要一些正则表达式的帮助。 (在.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"
棘手的部分是我需要保留原始文本,只需在其周围添加跨度标签。
我想我会先用我想要找到的字符串中的空格替换?*将其转换为正则表达式。 所有?*快?*棕色?*狐狸
谢谢!
答案 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