public static List<StringWithIndex> SplitWithoutModificationRegex(this StringWithIndex text, string regexStr) { var parts = new List<StringWithIndex>(); var regex = new Regex(regexStr); var area = text.Text; var prevIndex = 0; var m = regex.Match(area); while (m.Success) { var index = m.Index; parts.Add(text.Substring(prevIndex, index - prevIndex)); prevIndex = index; m = regex.Match(area, index + 1); } // Add last part parts.Add(text.Substring(prevIndex, area.Length - prevIndex)); return parts; }
public static List<StringWithIndex> SplitAfterFirstLine(this StringWithIndex text) { var area = text.Text; var lineBreakIndex = area.IndexOf("\r\n"); return new List<StringWithIndex>() { text.Substring(0, lineBreakIndex), text.Substring(lineBreakIndex+2) }; }
public static StringWithIndex TrimStart(this StringWithIndex text, params char[] chars) { var trimmed = text.Text.TrimStart(chars); var lengthDiff = text.Length - trimmed.Length; return text.Substring(lengthDiff, text.Length - lengthDiff); }
public static StringWithIndex ReplaceEnd(this StringWithIndex text, string match, string replacement) { if (text.Text.EndsWith(match)) { return text.Substring(0, text.Text.Length - match.Length); } else { return text; } }
public static StringWithIndex ReplaceStart(this StringWithIndex text, string match, string replacement) { if (text.Text.StartsWith(match)) { return text.Substring(match.Length); } else { return text; } }
public static StringWithIndex TrimStart(this StringWithIndex text, params string[] starts) { var trimmed = text.Text; foreach (var s in starts.OrderByDescending(s => s.Length)) { if (trimmed.StartsWith(s)) { trimmed = trimmed.ReplaceStart(s, ""); break; } } var lengthDiff = text.Length - trimmed.Length; return text.Substring(lengthDiff, text.Length - lengthDiff); }