在string []中查找关键字,将结果输入列表

时间:2015-03-25 12:03:55

标签: c# linq search contains

我有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();

5 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

我不是,真的了解你的输入数据,但是如果它是这样的

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();

答案 2 :(得分:0)

如果字符串结束路径:

        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

答案 3 :(得分:0)

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

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.*))");

答案 4 :(得分:0)

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

注意:这只会在 searchTerms中的任何内容后返回每行的部分。

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