清理RTF文本

时间:2008-08-21 16:30:50

标签: .net vb.net ms-word rtf

我想取一些RTF输入并清除它以删除除\ ul \ b \ i之外的所有RTF格式,以便将其粘贴到带有次要格式信息的Word中。

用于粘贴到Word中的命令将类似于: oWord.ActiveDocument.ActiveWindow.Selection.PasteAndFormat(0)(剪贴板中已有一些RTF文本)

{\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset0 Courier New;}}
{\colortbl ;\red255\green255\blue140;}
\viewkind4\uc1\pard\highlight1\lang3084\f0\fs18 The company is a global leader in responsible tourism and was \ul the first major hotel chain in North America\ulnone  to embrace environmental stewardship within its daily operations\highlight0\par

您是否知道如何使用正则表达式或其他东西安全地清理RTF?我使用VB.NET进行处理,但任何.NET语言示例都可以。

4 个答案:

答案 0 :(得分:6)

我会使用隐藏的RichTextBox,设置Rtf成员,然后检索Text成员以便以良好支持的方式清理RTF。然后我会使用之后手动注入所需的格式。

答案 1 :(得分:5)

我会做以下事情:

Dim unformatedtext As String

someRTFtext = Replace(someRTFtext, "\ul", "[ul]")
someRTFtext = Replace(someRTFtext, "\b", "[b]")
someRTFtext = Replace(someRTFtext, "\i", "[i]")

Dim RTFConvert As RichTextBox = New RichTextBox
RTFConvert.Rtf = someRTFtext
unformatedtext = RTFConvert.Text

unformatedtext = Replace(unformatedtext, "[ul]", "\ul")
unformatedtext = Replace(unformatedtext, "[b]", "\b")
unformatedtext = Replace(unformatedtext, "[i]", "\i")

Clipboard.SetText(unformatedtext)

oWord.ActiveDocument.ActiveWindow.Selection.PasteAndFormat(0)

答案 2 :(得分:2)

您可以使用正则表达式去除标记。只需确保您的表达式不会过滤实际为文本的标记。如果文本正文中有“\ b”,则它将在RTF流中显示为\ b。换句话说,您将匹配“\ b”但不匹配“\ b”。

您可以采取捷径并过滤掉标题RTF标记。在输入中查找第一次出现的“\ viewkind4”。然后预读第一个空格字符。您将从文本开头删除所有字符,直到并包括该空格字符。这将剥离RTF标题信息(字体,颜色等)。

答案 3 :(得分:1)

正则表达式,它不会正确解析所有内容(例如表格),但在大多数情况下都可以完成工作。

string unformatted = Regex.Replace(rtfString, @"\{\*?\\[^{}]+}|[{}]|\\\n?[A-Za-z]+\n?(?:-?\d+)?[ ]?", "");

魔术=)