For example, if you wanted to show the result of a search and replace, given:
var text = "An apple a day keeps the doctor away\n you can say that any day of the year today or tomorrow."; var find = "day"; var replace = "week"; text.HighlightText(find).Dump("Original text"); text.Replace(find, replace).HighlightText(replace).Dump("updated text");
The result would be:
Original text |
---|
An apple a
day
keeps the doctor away
you can say that any
day
of the year.
|
updated text |
---|
An apple a
week
keeps the doctor away
you can say that any
week
of the year.
|
See extension method below:
public static class MyExtensions { public static DumpContainer HighlightText(this string text, string find){ var dc = new DumpContainer(); var sb = new StringBuilder(); foreach(var line in text.Split('\n')) { if(line.Contains(find)) { var before_ix = line.IndexOf(find); var beforeText = line.Substring(0, before_ix); var afterText = line.Substring(before_ix + find.Length); dc.Content = Util.HorizontalRun(false, dc.Content, beforeText, Util.Highlight(find), afterText, "\n"); } else { sb.AppendLine(line); dc.Content = Util.HorizontalRun(false,dc.Content, line, "\n"); } } return dc; } }
Known limitations:
- The result this finds one match per line.
- carriage returns are stripped from the result - a limitation of the HorizontalRun util class
1 comment:
I was looking for something slightly more robust and wound up having to write my own so I just thought I'd share the results in case anyone else coming across this finds it useful :)
https://gist.github.com/TheXenocide/23bf89b18e29b4ca35f95207e352f331
Post a Comment