如何以编程方式在RTF文本中找到文本内容的开头?

问题描述 投票:-1回答:1

我正在尝试创建一个程序,该程序将文本读取为富文本格式,并使用Markdown将其输出。我已将以下段落复制到RichTextBox中(强调保留了原来的内容)

[叙述]和故事]的必要组成部分。当故事的作者(无论是作家,演讲者,电影制片人还是其他人)将故事传达给听众时,观众可以构建世界的内部表示形式,故事发生了(“故事世界”)。听众如何做到这一点取决于作者选择在叙述中明确包含世界的哪些方面,例如人物和性格,设置及其描述以及听众可能不了解的故事世界的信息。] >而且当我阅读RichTextBox.Rtf属性时,它看起来像这样(为演示添加了重点:)]

{\ rtf1 \ fbidis \ ansi \ ansicpg1252 \ deff0 \ deflang2057 {\ fonttbl {\ f0 \ fswiss \ fprq2 \ fcharset0 Arial;} {\ f1 \ froman \ fprq2 \ fcharset0 Times New Roman;}}{\ colortbl; \ red0 \ green0 \ blue0;}

\ viewkind4 \ uc1 \ pard \ ltrpar \ cf1 \ f0 \ fs22

\ b叙述和叙事\ b0的必要组成部分。当故事的\ b作者\ b0(无论是作家,演讲者,电影制片人还是其他人)向他们的观众传达故事时,\ b观众\ b0可以构建世界的内部表示形式,故事发生了(\ ldblquote故事世界\ rdblquote)。听众如何做到这一点取决于作者选择在叙述中明确包含世界的哪些方面,例如人物和性格,设置及其描述以及听众可能不了解的故事世界的信息。\ cf0 \ f1 \ fs24 \ par\ pard \ ltrpar \ sa160 \ sl252 \ slmult1 \ fs22 \ par\ pard \ ltrpar \ cf1 \ f0 \ par}

我想从此Rtf字符串中提取文本内容-我对Rtf之前和之后的代码片段不感兴趣,我想知道的只是粗体,斜体和其他格式。我正在尝试找出如何为任何给定的段落确定

文本从何处开始

作为一个人,我显然知道文本的开头-在我加粗的部分之后。我不知道如何告诉程序寻找什么。我很确定段落开头的rtf代码对于每个段落都是不同的,所以我不能仅仅告诉我的程序找到这个特定的代码并将其删除。

我想到的其他事情是在输出的rtf中搜索原始段落中的前n个字符,就像搜索“必要组件”一样。但是,如果其中任何第一个单词都用粗体显示,则在rtf输出中看起来不会相同,因此该方法也无法始终如一地工作。

我确定我缺少一个明显的解决方案,但是如果有人知道我如何能够巧妙地确定文本内容的开始和结束位置,我会很高兴的。

我在Winforms中使用VB.NET,因此希望在VB.NET或伪代码中提供答案。

我正在尝试创建一个程序,该程序将文本读取为富文本格式,并使用Markdown将其输出。我已将以下段落复制到RichTextBox中(强调保留了原来的内容)必要的...

好吧,它超级笨拙,但是我已经解决了我的问题。

我发现this article具有用VB.NET编写的将RTF转换为HTML的完整功能。

然后,我刚刚执行了此操作,该操作将从该函数获取结果HTML输出,并将其转换为markdown。到目前为止,它运行良好。

If InputRTB.Text <> "" Then Dim input As String = InputRTB.Text Dim output As String = "" output = sRTF_To_HTML(InputRTB.Rtf) output = output.Substring(output.IndexOf("<span style")) output = output.Substring(output.IndexOf(">") + 1) Dim endpos = output.IndexOf("</span>") output = output.Remove(endpos, output.Length - endpos) Dim foundAllBold As Boolean = False Dim boldWords As New List(Of String) Do If output.Contains("<b>") Then Dim startb = output.IndexOf("<b>") Dim endb = output.IndexOf("</b>") Dim word = Trim(output.Substring(startb + 3, endb - startb - 3)) If word <> "" Then Dim wordArray() As Char = word.ToCharArray wordArray(0) = Char.ToUpper(wordArray(0)) word = New String(wordArray) End If boldWords.Add(word) output = Replace(output, "<b>", "**", , 1) output = Replace(output, "</b>", "**", , 1) Else foundAllBold = True End If Loop Until foundAllBold = True output = output.Replace(vbCrLf, " ") OutputRTB.Text = output WordListRTB.Clear() For Each b As String In boldWords WordListRTB.AppendText(b & vbCrLf) Next Clipboard.SetText(OutputRTB.Text) MsgBox("Copied output to clipboard") End If

vb.net winforms richtextbox richtext
1个回答
0
投票
好吧,它超级笨拙,但是我已经解决了我的问题。

我发现this article具有用VB.NET编写的将RTF转换为HTML的完整功能。

© www.soinside.com 2019 - 2024. All rights reserved.