Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在使用C进行搜索后从原始字符串中获取搜索结果#_C#_Asp.net_Search Engine - Fatal编程技术网

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

C# 如何在使用C进行搜索后从原始字符串中获取搜索结果#,c#,asp.net,search-engine,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

我在这里尝试的是,我可以在
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]);
        }
    }
}
private void Search\u单击(对象发送者,事件参数e)
{
string[]filepath=Directory.GetFiles(@“C:\Users\abcdq\Downloads\Documents\”、“*.pdf”、SearchOption.AllDirectories);
for(int i=0;i
例如:在account.pdf中,它有:

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

  • 当我搜索
    电子邮件确认
    时,结果必须返回给我字符串作为
    电子邮件确认
    而不是作为
    电子邮件确认
  • 除此之外,我正在寻找返回字符串的方法,该字符串的左右两侧有更多字符,如
    电子邮件和电子邮件确认–您的电子邮件地址
  • 如果您想知道在字符串中找到要查找的文本的位置,请使用
    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);
    }
    

    当然,您可以随意初始化
    前缀
    后缀
    ;为了示例,我在这里硬编码了它们。

    由于字符串的数量很大,我仍然在寻找最快的搜索方法。正如我在互联网上所做的调查,Contains()比IndexOf()运行得更快。好吧,a)我怀疑你的“互联网调查”是否能告诉你真实世界中代码的实际性能,b)如果你需要知道实际匹配的文本,那么
    Contains()
    是否比
    IndexOf()快并不重要
    因为
    Contains()
    方法不会告诉您这一点。您是否希望代码速度快,但不满足您的要求?或者是速度较慢但能做你想做的事情的代码?(并不是说你必须选择,但如果你选择了…)那太好了。如何在我的线程中处理案例2?在第一种情况下,您的代码运行得非常好。但是,它现在只解决了我一半的问题。对不起……你问题的第二部分语法不正确,所以我(仍然)不明白。除了简单地从
    索引中减去一些数字,然后在子字符串的总长度中添加一些数字之外,您还想做什么?也就是说,无论如何,在同一个帖子中发布两个问题都不是一个好主意,因为这会使回答过程复杂化,并且会冒着答案没有注意到问题的风险。我知道,你应该把第二部分作为一个新的问题发布,用你所得到的作为你的出发点。很抱歉给你带来不便,我的英语可能不好。所以我想要的是:5个字符+电子邮件确认+5个字符作为
    电子邮件和电子邮件确认–您的