Очистка текста RTF

Я хотел бы взять некоторый ввод 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.

21.08.2008 16:30:49
4 ОТВЕТА
РЕШЕНИЕ

Я хотел бы использовать скрытый RichTextBox, установить элемент Rtf, а затем извлечь элемент Text для очистки RTF хорошо поддерживаемым способом. Затем я бы использовал вручную ввести желаемое форматирование впоследствии.

6
21.08.2008 17:39:40

Вы можете вырезать теги с помощью регулярных выражений. Просто убедитесь, что ваши выражения не будут фильтровать теги, которые были на самом деле текст. Если бы текст имел «\ b» в теле текста, он бы отображался как \ b в потоке RTF. Другими словами, вы должны соответствовать «\ b», но не «\ b».

Вы могли бы, вероятно, взять короткий путь и отфильтровать теги RTF заголовка. Ищите первое вхождение «\ viewkind4» во входных данных. Затем читайте вперед до первого пробела. Вы удалили бы все символы от начала текста до и включая этот пробел. Это исключило бы информацию заголовка RTF (шрифты, цвета и т. Д.).

2
21.08.2008 16:51:54

Я бы сделал что-то вроде следующего:

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)
5
21.08.2008 18:22:48

Регулярно выражайте это, он не будет анализировать абсолютно все правильно (например, таблицы), но выполняет работу в большинстве случаев.

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

Магия =)

1
8.06.2012 01:22:14