在标记文本中进行纯文本搜索

本文关键字:文本 搜索 | 更新日期: 2023-09-27 18:25:28

我正在尝试(用C#)编写代码,以便在markdown文件中搜索任何纯文本单词或短语。目前,我正在用一种冗长的方法来完成这项工作:将markdown转换为HTML,从HTML文本中去掉HTML元素标记,然后使用一个简单的正则表达式来搜索有问题的单词/短语。不用说,这可能相当缓慢。

一个具体的例子可以说明这个问题。假设降价文件包含

Something ***significant***

我希望能够通过提供搜索短语something significant(即忽略***)来找到它。

有没有一种有效的方法可以做到这一点(即避免转换为HTML),并且不需要我编写自己的markdown解析器?

编辑:我想要一种通用的方法来搜索包含任何有效降价格式的降价文本中的任何文本或短语。第一个答案是匹配我给出的具体文本示例的方法。

编辑:我应该明确一点:这是面向用户的简单搜索所必需的,并且markdown文件可以包含任何有效的markdown格式。出于这个原因,我需要能够忽略标记中的任何内容,如果用户将标记转换为HTML,他们不会将其视为文本。例如,指定图像的标记文本(如![Valid XHTML](http://w3.org/Icons/valid-xhtml10).,应在搜索过程中跳过)。转换为HTML对用户来说会产生不错的结果,因为它可以合理准确地反映用户所看到的内容(但这只是一个缓慢的解决方案,尤其是当有很多降价文本需要查看时)。

在标记文本中进行纯文本搜索

使用正则表达式

var str = "Something ***significant***";
var regexp = new Regex("Something.+significant.+");
Console.WriteLine(regexp.Match(str).Success);

我也想做同样的事情。我想到了一种实现这一目标的方法。

您的方法有两个步骤。

  1. 从markdown源中获取纯文本(还有两个步骤。markdown->HTML和HTML->剥离为纯文本)
  2. 在纯文本中搜索

现在,如果降价源被持久化在数据存储中,那么您也可以仅出于搜索目的而持久化纯文本。因此,当持久化markdown源时(或每次更新markdown源),从markdown中提取纯文本的步骤可能只执行一次,但实际在markdown中搜索的代码可以立即在已经持久化的纯文本数据上执行任意多次。

例如,如果您有一个具有类似markdown_text的列的关系数据库,那么您也可以创建一个plain_text列,并在每次更改markdown_text列时重新创建其值。

如果保存降价比以前多花费几毫秒(甚至几秒钟),用户就不会担心了。当改变系统状态的事情需要一些时间(他们觉得系统中确实发生了一些事情),而不是立即发生(他们觉得出了问题,他们的命令没有执行)时,用户往往会感到安全。但是,如果搜索需要几毫秒以上才能完成,他们会感到沮丧。通常,用户希望查询立即完成,但命令需要一些时间(但不超过几秒钟)。

试试这个:

string input = "Something ***significant***";
string v = input.Replace("***", "");
Console.WriteLine(v)

看看这个例子:在这里输入链接描述