【问题标题】:Best way to remove extra marks from an RTF text从 RTF 文本中删除多余标记的最佳方法
【发布时间】:2012-02-20 15:15:05
【问题描述】:

我有一个如下所示的 RTF:

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

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

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

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    是的,这可能会让人抓狂。

    解决此问题的一种方法是使用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
    \par
    }

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-13
      • 1970-01-01
      • 1970-01-01
      • 2020-02-14
      • 2013-05-10
      • 2016-05-22
      • 1970-01-01
      • 2016-08-10
      相关资源
      最近更新 更多