子串匹配索引

时间:2016-06-22 03:30:24

标签: c# regex linq

我有一个功课问题,我需要使用正则表达式和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,我真的很感激帮助!

1 个答案:

答案 0 :(得分:2)

  

如果索引存在,我也不知道如何使它返回true   如果不是,则为假

您应该查找Match.Success,表示匹配是否成功。

当谈到演示文稿时(如果匹配失败,你需要-1),你可以处理条件运算符。

WriteLine($"{(match.Success? match.Index: -1)}");
相关问题