【问题标题】:Index of Substring Match子串匹配索引
【发布时间】:2016-06-22 03:30:24
【问题描述】:

我有一个作业问题,我需要使用正则表达式和 LINQ 来提取给定字符串数组中的子字符串索引并将它们打印出来。更具体地说,问题是这样的:

为一个字符串编写一个正确、优雅和高效的扩展方法,该方法确定(使用正则表达式和 LINQ)来确定该字符串是否包含“ou”或“in”作为子字符串,然后返回开始索引如果存在任何索引,则返回 true,如果没有有效索引,则返回 false。注意:确保在索引数组中放置一个 -1 的标记。

这是我目前写的代码

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,我将非常感谢您的帮助!

【问题讨论】:

    标签: c# regex linq


    【解决方案1】:

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

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

    当涉及到演示时(当匹配不成功时您需要-1),您可以处理条件运算符。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-02
      • 2018-11-19
      • 2020-08-02
      • 2016-12-11
      • 2013-12-20
      • 1970-01-01
      相关资源
      最近更新 更多