清理 RTF 文本

Cleaning up RTF text

提问人:Vincent 提问时间:8/22/2008 最后编辑:Lars TruijensVincent 更新时间:6/8/2012 访问量:19649

问:

我想获取一些 RTF 输入并清理它以删除所有 RTF 格式,除了 \ul \b \i 将其粘贴到具有次要格式信息的 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 语言示例都可以。

.NET vb.net MS-Word RTF

评论


答:

2赞 Chris Miller 8/22/2008 #1

您可以使用正则表达式去除标签。只需确保您的表达式不会过滤实际上是文本的标签即可。如果文本正文中有“\b”,则它将在 RTF 流中显示为 \b。换言之,您将匹配“\b”而不是“\b”。

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

6赞 Nick 8/22/2008 #2

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

5赞 Martin 8/22/2008 #3

我会做这样的事情:

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)
1赞 Toby Holland 6/8/2012 #4

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

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

魔术 =)