如何在使用C#搜索后从原始字符串中获取搜索结果

时间:2014-11-07 01:36:14

标签: c# asp.net search-engine

我在这里尝试过的是,我可以在Textbox1.Text中显示内容字符串的文件路径,但我无法获取并显示该文件中的字符串。

private void Search_Click(object sender, EventArgs e)
{
    string[] filePaths = Directory.GetFiles(@"C:\Users\abcdq\Downloads\Documents\", "*.pdf", SearchOption.AllDirectories);
    for (int i = 0; i < filePaths.Length; i++)
    {
        string settext = GetTextFromPDF(filePaths[i]);
        if (settext.ToUpper().Contains(textBox1.Text.ToUpper()))
        {
            MessageBox.Show(filePaths[i]);
        }
    }
}

例如:在account.pdf中,它有:

  

新用户?对于新用户,您需要填写表格   页面右侧包含以下信息:支持参考 -   这是您与我们的支持合同号码,例如DM1234或RH1234。   公司名称 - 这需要是我们知道您匹配的确切名称   你的支持参考。显示名称 - 您的名字,这将   在您使用网站中的某些表单时自动填写。   电子邮件&amp;电子邮件确认 - 您的电子邮件地址,这将成为您的   用户名。密码 - 至少包含6个字符的密码   (字母,数字和符号)。

  1. 当我搜索email confirm时,结果必须返回给我Email confirm字符串而不是email confirm
  2. 更重要的是,我正在寻找返回字符串的方法,左右两侧有更多字符,字符串为Email & Email confirm – Your email address

1 个答案:

答案 0 :(得分:1)

如果您想知道字符串中的 where 找到了您要查找的文字,请使用string.IndexOf()。例如:

string searchText = textBox1.Text;
int index = settext.IndexOf(searchText, StringComparison.OrdinalIgnoreCase);

if (index >= 0)
{
    string foundText = settext.Substring(index, searchText.Length);
}

对于更复杂的搜索,您可以使用System.Text.RegularExpressions.Regex类。它返回Match个对象,而这些对象又包含描述实际匹配文本的Group个对象。

编辑:

为了适应在找到的文本周围返回上下文,请使用以下替代方法:

string searchText = textBox1.Text;
int prefix = 5, postfix = 5;
int index = settext.IndexOf(searchText, StringComparison.OrdinalIgnoreCase);

if (index >= 0)
{
    string foundText = settext.Substring(index, searchText.Length);
    int contextStart = Math.Max(0, index - prefix);
    int contextLength = Math.Min(
        settext.Length - contextStart, searchText.Length + prefix + postfix);
    string contextText = settext.Substring(contextStart, contextLength);
}

当然,您可以随意初始化prefixpostfix;为了这个例子,我在这里对它们进行了硬编码。