【发布时间】:2020-01-23 10:32:25
【问题描述】:
我正在尝试创建一个程序,它将文本作为富文本读取,并使用 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 或伪代码的答案。
【问题讨论】:
-
为什么要进行离题的近距离投票?这是一个关于编程的问题,可以使用编程来回答。另外,为什么开车投反对票?如果这个问题有什么可以改进的地方,请随时输入,我会尝试改进这个问题。
-
您可以查看How do I convert an RTF string to a Markdown string...的答案中提到的实用程序的源代码。
-
谢谢,这使我找到了this article,它基本上为我提供了将 RTF 转换为 HTML 的功能,这是成功的一半。现在应该更容易将 HTML 解析为 markdown,希望 ...
标签: vb.net winforms richtextbox richtext