Очистка текста 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 будет делать.

Ответ 1

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

Ответ 2

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

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)

Ответ 3

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

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

Ответ 4

Regex it, он не будет разбирать абсолютно все правильно (например, таблицы), но выполняет работу в большинстве случаев.

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

Магия =)