代码之家  ›  专栏  ›  技术社区  ›  Kyu96

括号之间的正则表达式

  •  0
  • Kyu96  · 技术社区  · 9 年前

    <random stuff between><random stuff between><random stuff between><random stuff between>
    

      if (Regex.IsMatch(arg, "^(<.+>){4}$"))
                    return true;
    

    但是,如何通过同时使用正则表达式来获取括号之间的内容呢?

    3 回复  |  直到 9 年前
        1
  •  4
  •   Aleks Andreev Md. Suman Kabir    9 年前

    请尝试以下代码:

    var source = "<abc><def><g><hij>";
    var pattern = new Regex("<(?<content>[^>]+)>");
    
    var content = pattern.Matches(source).Cast<Match>().Select(m => 
      m.Groups["content"].Value).ToArray();  
    


    如果您正好需要4个组,则可以使用此代码(来自@C Perkins注释):

    var pattern = new Regex("^(<(?<content>[^>]+)>){4}$");
    var content2 = pattern.Match(source).Groups["content"].Captures
                          .Cast<Capture>().Select(c => c.Value)
                          .ToArray();
    
        2
  •  2
  •   Matt Burland    9 年前

    ^<(.+)><(.+)><(.+)><(.+)>$
    

    虽然 [^>] .

    然后括号之间的每一段文字将在您的比赛中单独分组。

    最后,如果您的数据实际上是XML或类似的东西,那么最好不要使用正则表达式,而是使用适当的解析器。

        3
  •  0
  •   JoshG    9 年前

    使用以下代码,它就会工作。

            Regex regex = new Regex(@"[\w\s]+");
    
            string example = "<random stuff between><random stuff between>
                               <random stuff between><random stuff between><a><a 
                              a>";
    
            Match match = regex.Match(example);
    
            while (match.Success)
            {
                Console.WriteLine(match);
                match = match.NextMatch();
            }