从RTF文本中删除额外标记的最佳方法

时间:2012-01-27 16:20:53

标签: c# winforms

我的RTF看起来像这样:

  

{\ rtf1 \ ansi \ ansicpg1252 \ uc0 \ deff0 {\ fonttbl \ r \ n {\ f0 \ fswiss \ fcharset0 \ fprq2 Arial;} \ r \ n {\ f1 \ froman \ fcharset2 \ fprq2 Symbol;}} \ r \ n {\ colortbl; \ red0 \ green0 \ blue0; \ red255 \ green255 \ blue255;} \ r \ n \ r \ n \ deftab1134 \ pard \ plain \ f0 \ fs24 hohohoHi \ pard \ par \ par} < / p>

在它的末尾有一个额外的\ pard \ par,我想删除它。我认为这是我必须使用的文本编辑器的一些错误或类似的东西在RTF的末尾添加额外的\ pard \ par,但是我还想保留\ pard \ par如果用户有意将它们添加到他们的文本中。所以我想我想要一个很好的方法从RTF的末尾删除额外的\ pard \ par,但只删除它们中的一对,因为用户可能故意输入了一些断行...

字符串方法?正则表达式?

1 个答案:

答案 0 :(得分:2)

是的,这可能令人抓狂。

另一种方法是SelectAll并抓住SelectedRtf而不是Rtf

为避免闪烁用户,可以更轻松地创建快速临时RichTextBox控件,如下所示:

StringBuilder sb = new StringBuilder();
sb.AppendLine(richTextBox1.Rtf);
sb.AppendLine();

string myRTF = string.Empty;
using (RichTextBox rtb = new RichTextBox()) {
  rtb.Rtf = richTextBox1.Rtf;
  rtb.SelectAll();
  sb.AppendLine(rtb.SelectedRtf);
}

string results = sb.ToString();

这是两个方法的结果,只有一个“Hello”和一行返回:

  

{\ rtf1 \ ansi \ ansicpg1252 \ deff0 \ deftab1134 {\ fonttbl {\ f0 \ fswiss \ fprq2 \ fcharset0 Arial;}}
  \ viewkind4 \ uc1 \ pard \ lang1033 \ f0 \ fs24你好\ par \   \相提并论
  }

     

{\ rtf1 \ ansi \ ansicpg1252 \ deff0 \ deftab1134 {\ fonttbl {\ f0 \ fswiss \ fprq2 \ fcharset0 Arial;}}
  \ viewkind4 \ uc1 \ pard \ lang1033 \ f0 \ fs24你好\ par \   }