我有一个功课问题,我需要使用正则表达式和LINQ来提取给定字符串数组中的子字符串索引并打印出来。更具体地说,问题是:
为字符串写一个正确,优雅和有效的扩展方法,确定(使用正则表达式和LINQ)字符串是否包含“ou”或“in”作为子字符串然后返回开始索引每个子字符串,如果存在任何索引,则返回true;如果没有有效索引,则返回false。注意:确保在索引数组中放置-1的sentinel。
这是我到目前为止编写的代码
public static void Main()
{
Regex regex1 = new Regex(@"ou", RegexOptions.IgnoreCase);
Regex regex2 = new Regex(@"in", RegexOptions.IgnoreCase);
string[] sData = new string[] {"Sour", "Candy", "apple",
"Hotdog", "Jumping", "Pompadour", "Insane"};
var selected2 = from strings in sData
let matches2 = regex2.Match(strings)
select matches2;
var selected1 = from strings in sData
let matches = regex1.Match(strings)
select matches;
foreach (var match in selected1)
{
WriteLine($"{match.Index}");
}
WriteLine();
foreach (var match in selected2)
{
WriteLine($"{match.Index}");
}
ReadKey(true);
}
我遇到的问题是,foreach打印出一个全零的数组,并且没有匹配的地方,并且匹配的地方打印出它在字符串中的位置的索引是好的,但问题似乎是想要-1而不是没有匹配的零。这当然是有道理的,因为如果匹配为零怎么办?另外,我不知道如果索引存在则如何使其返回true,否则返回false。如果有人擅长LINQ,我真的很感激帮助!
答案 0 :(得分:2)
如果索引存在,我也不知道如何使它返回true 如果不是,则为假
您应该查找Match.Success
,表示匹配是否成功。
当谈到演示文稿时(如果匹配失败,你需要-1
),你可以处理条件运算符。
WriteLine($"{(match.Success? match.Index: -1)}");