我有string[]
包含ie:
abcd
Saving C:\\xx
aacd
Saving C:\\yy
aecd
Saving C:\\zz
and so on
linq中是否有搜索所有行的方法,只返回C:\\xx
,C:\\yy
和C:\\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();
答案 0 :(得分:1)
您不需要All
方法,您可以使用:
where comp.StartsWith(searchTerms)
而不是分开\r
和\n
,最好使用它:
string[] line = result.Split(new[] { Environment.NewLine }, StringSplitOptions.None);
您还应该从line.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);
答案 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()));