Есть ли дротик, эквивалентный классу Regex Capture в C #? - PullRequest
2 голосов
/ 12 марта 2019

Я пытаюсь скопировать этот пример MSDN , который использует класс Capture в Dart. Я заметил, что у Дарт, похоже, нет понятия Захватов внутри группы.

Вот пример источника MSDN для потомков:

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string input = "Yes. This dog is very friendly.";
      string pattern = @"((\w+)[\s.])+";
      foreach (Match match in Regex.Matches(input, pattern))
      {
         Console.WriteLine("Match: {0}", match.Value);
         for (int groupCtr = 0; groupCtr < match.Groups.Count; groupCtr++)
         {
            Group group = match.Groups[groupCtr];
            Console.WriteLine("   Group {0}: {1}", groupCtr, group.Value);
            for (int captureCtr = 0; captureCtr < group.Captures.Count; captureCtr++)
               Console.WriteLine("      Capture {0}: {1}", captureCtr, 
                                 group.Captures[captureCtr].Value);
         }                      
      }
   }
}
// The example displays the following output:
//       Match: Yes.
//          Group 0: Yes.
//             Capture 0: Yes.
//          Group 1: Yes.
//             Capture 0: Yes.
//          Group 2: Yes
//             Capture 0: Yes
//       Match: This dog is very friendly.
//          Group 0: This dog is very friendly.
//             Capture 0: This dog is very friendly.
//          Group 1: friendly.
//             Capture 0: This
//             Capture 1: dog
//             Capture 2: is
//             Capture 3: very
//             Capture 4: friendly.
//          Group 2: friendly
//             Capture 0: This
//             Capture 1: dog
//             Capture 2: is
//             Capture 3: very
//             Capture 4: friendly

Вот моя попытка воспроизвести его в дротике:

  final RegExp _regExp = new RegExp(r'((\w+)[\s.])+');
  final String _input = "Yes. This dog is very friendly.";

  var matches = _regExp.allMatches(_input);

  for   (int i = 0; i < matches.length; i++) {
    var match = matches.elementAt(i);
    print('Match $i');
    for (int j = 0; j < match.groupCount; j++) {
      var group = match.group(j);
      print('\tGroup: $j $group');
    }
  }

Но это дает следующие результаты:

Match 0
    Group: 0 Yes.
    Group: 1 Yes.
Match 1
    Group: 0 This dog is very friendly.
    Group: 1 friendly.

Обратите внимание, что последняя группа (группа 1) в матче 1 содержит только «дружественные». Есть ли способ в Dart перечислять несколько захватов в пределах одной группы, например, в выходных данных примера MSDN?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...