RTF文本是否为空

时间:2012-03-23 14:30:14

标签: c++ text rtf

除了纯格式之外,C ++中是否有一种简单的方法来判断RTF文本字符串是否包含任何内容。

例如,这个文本只是格式化,这里没有真正的内容:

{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 MS Sans Serif;}}

在RichTextControl中加载RTF文本不是一个选项,我想要一些能够快速运行且需要最少资源的东西。

1 个答案:

答案 0 :(得分:0)

唯一可靠的方法是编写自己的RTF解析器[spec],使用类似LibRTF的库,或者您可以考虑保持RichTextControl打开并使用新的RTF文档更新它而不是破坏它每次都是对象。

我认为RTF不是常规语言,因此无法通过RegEx正确解析(尽管有数百万次尝试,但与HTML不同),但您不需要编写完整的RTF解析器。 我将从一个简单的字符串解析器开始。尝试:

  1. 删除{\ and}
  2. 之间的内容
  3. 删除标签。标签以反斜杠开头,\,后跟一些文本。如果反斜杠后跟空格,则它不是标记。
  4. 文档应以至少一个结束大括号结束,}
  5. 任何不是空格的内容都应该是文档内容,尽管这可能有一些例外情况,因此您需要测试大量的RTF样本。