唉。首先,你应该看到这样的3部分  123<em>abc       456<em>def       789。这三部分是用 </em> 分割的。剩下的一步,你自己想吧。

解决方案 »

  1.   


            static string GetString(string source, int len)
            {
                string newSource = source.Replace("<em>", "");
                newSource = newSource.Replace("</em>", "");
                if (newSource.Length < len)
                {
                    throw new Exception("要截取的长度超出了限制");
                }
                int lastIndex = source.LastIndexOf("</em>");
                string endValue = lastIndex < source.Length - 5 ? source.Substring(lastIndex + 5, source.Length - lastIndex - 5) : "";            StringBuilder sb = new StringBuilder();
                MatchCollection maths = Regex.Matches(source, "(?<value>[^>]*)(?<em>[<][/]?em[>])");            for (int i = 0; i < maths.Count; i++)
                {
                    string value = maths[i].Groups["value"].Value;
                    string em = maths[i].Groups["em"].Value;
                    if (value.Length <= len)
                    {
                        if (em == "</em>")
                        {
                            sb.AppendFormat("<em>{0}</em>", value);
                        }
                        else
                        {
                            sb.Append(value);
                        }
                        len -= value.Length;
                    }
                    else
                    {
                        sb.Append(value.Substring(0, len));
                        len -= value.Length;
                        break;
                    }
                }
                if (len > 0)
                {
                    sb.Append(endValue.Substring(0, len));
                }            return sb.ToString();
            }坐等更好的办法
      

  2.   


    正则写错了 改为(?<value>[^<]*)(?<em>[<][/]?em[>])