【问题标题】:Finding keywords in string[] getting results to a list在 string[] 中查找关键字,将结果添加到列表中
【发布时间】:2015-05-29 02:15:19
【问题描述】:

我有一个 string[] 包含 ie:

abcd

Saving C:\\xx 

aacd

Saving C:\\yy

aecd

Saving C:\\zz 

and so on

在 linq 中是否有一种方法可以搜索所有行并仅将 C:\\xxC:\\yyC:\\zz 返回到列表/数组。

这是我迄今为止尝试过的:

string[] line = result.Split(new[] { '\r', '\n' });
string searchTerms = "Saving ";

var results = (from comp in line.ToString()
               where searchTerms.All(s => comp.Contains(s))
               select comp).ToList();

【问题讨论】:

  • 您应该删除ToString,这样您就可以迭代数组中的值,而不是数组System.String[] 类型名称中的字符。

标签: c# linq search contains


【解决方案1】:

你不需要All方法,你可以使用:

where comp.StartsWith(searchTerms)

与其拆分\r\n,不如使用:

string[] line = result.Split(new[] { Environment.NewLine }, StringSplitOptions.None);

您还应该从line.ToString()删除ToString

var results = (from comp in line
               where comp.StartsWith(searchTerms)
               select comp).ToList();

【讨论】:

  • 很好,谢谢,我如何也可以轻松地使用该表达式省略保存?
【解决方案2】:

我不太了解你的输入数据类型,但是如果是这样的话

string[] str = new string[] { "abcd", "Saving C:\\xx", "aacd", "Saving C:\\yy", "aecd", "Saving C:\\zz"};

那么您可以执行以下操作:

List<string> result = str.Where(s => s.StartsWith("Saving C:\\")).ToList();

【讨论】:

    【解决方案3】:

    如果字符串结束路径:

            string result = @"abcd
    Saving C:\xx 
    aacd
    Saving C:\yy
    aecd
    Saving C:\zz 
    and so on";
    
                string[] line = result.Split(new[] { '\r', '\n' });
                string searchTerms = "Saving ";
                var lst = line.Where(x => x.StartsWith(searchTerms))
                    .Select(y => y.Substring(searchTerms.Length));
                foreach (var x in lst)
                    Console.WriteLine(x);
    

    http://ideone.com/OXDMO5

    【讨论】:

      【解决方案4】:

      这应该会为您提供一个包含每个路径的简单 IEnumerable。

      注意:这只会返回每行之后的部分,无论searchTerms中的内容。

      var result = 
            line.Where(l => l.StartsWith(searchTerms))
                .Select(c => new string(c.Skip(searchTerms.Count()).ToArray()));
      

      【讨论】:

        【解决方案5】:

        如果您只想从字符串中获取路径,您可以为此使用正则表达式:

        var result = "abcd\r\nSaving C:\\xx\r\naacd\r\nSaving C:\\yy\r\naecd\r\nSaving C:\\zz\r\n";
        var regex = new Regex(@"(?<=Saving )(.*)");
        var matches = regex.Matches(result).Cast<Match>().Select(m => m).ToList();
        

        编辑

        另一种更通用的正则表达式形式,可用于获取所有路径(不仅仅是Saving之前的路径):

        var matches = Regex.Matches(result, ".:\\\\(.*?)(?=\s.*)", RegexOptions.Multiline).Cast<Match>().Select(m => m).ToList();
        

        这也会删除路径后的所有空格。

        编辑 2

        要获取引号内的路径(带空格的路径),您可以使用以下正则表达式:

        var regex = new Regex("((\"\\w|\\w):\\\\)((.*\")|(.*?)(?=\\s.*))");
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-10-05
          • 1970-01-01
          • 2021-09-28
          • 1970-01-01
          • 2018-06-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多