/// <summary> /// Separate string into Pair array. /// </summary> /// <example> /// Input : [00:17:97]帰[00:18:37]り[00:18:55]道[00:18:94]は[00:19:22] /// Output : [new Pair(17970,"帰"),new Pair(18370,"り"),new Pair(18550,"道"),new Pair(18940,"は"),new Pair(19220,"")] /// </example> /// <param name="line"></param> /// <returns></returns> public static Pair[] SeparateKaraokeLine(string line) { var offset = 0; var tt = ""; var h = HeadTimeTagRegex.Match(line); if (h.Success) { tt = h.Value; offset = h.Length; } var ret = new List <Pair>(); var mc = TimeTagRegex.Matches(line, offset); if (mc.Count == 0) { ret.Add(ConvertPair(tt, line.Substring(offset))); return(ret.ToArray()); } ret.Add(ConvertPair(tt, line.Substring(offset, mc[0].Index - offset))); int i; for (i = 1; i < mc.Count; i++) { offset = mc[i - 1].Index + mc[i - 1].Length; ret.Add(ConvertPair(mc[i - 1].Value, line.Substring(offset, mc[i].Index - offset))); } offset = mc[i - 1].Index + mc[i - 1].Length; ret.Add(ConvertPair(mc[i - 1].Value, line.Substring(offset))); return(ret.ToArray()); //Add pair, convert [mm:ss.ss] into millisecond Pair ConvertPair(string timeTag, string text) { return(new Pair(TimeTagToMillionSecond(timeTag), text)); } }
/// <summary> /// Remove time string like [mm:ss.ss] /// </summary> /// <example> /// Input : [00:17:97]帰[00:18:37]り[00:18:55]道[00:18:94]は[00:19:22] /// Output : 帰り道は /// </example> /// <param name="text"></param> /// <returns></returns> public static string RemoveTimeTag(string text) { return(TimeTagRegex.Replace(text, "")); }