2015-12-02 1 views
1

Я не могу совместить вложенную группу захвата несколько раз, результат только дает мне последний внутренний захват.Regex не соответствует внутренним повторяемым событиям

Входная строка: =F2=0B=E2some text =C2=A3
Regex: (\=([0-9A-F][0-9A-F]))+

захваченной группы он возвращает это:

Группа 1:

  • =F2=0B=E2
  • =C2=A3

Группа 2:

  • E2
  • A3

Но мне нужно Группа 2, чтобы вернуться:

  • F2
  • 0B
  • E2

и

  • C2
  • A3

внутри каждой внешней группы.

Возможно ли это как-то?

+0

Что такое язык программирования? Обратите внимание, что вы не можете получить эти значения «F2», «0B» в Group2, вы можете получить их в Group2 * Captures *. –

+0

@stribizhev .NET C# на самом деле – silkfire

ответ

2

Вам просто нужно получить доступ к коллекции match.Groups[2].Captures.

См regex demo

enter image description here

Что вам нужно, это CaptureCollection. Смотрите это Regex.Match reference:

Captures
Возвращает коллекцию всех захватов совпавших группы захвата, в сокровенном-левом-первый порядке (или сокровенный-правый-первый порядок, если регулярное выражение изменяются с опция RegexOptions.RightToLeft). Коллекция может иметь ноль или более элементов. (Унаследовано от Group.)

Вот sample demo, который выводит все снимки из Groups[2] CaptureCollection (F2, 0B, E2, C2, A3):

var pattern = "(=([0-9A-F]{2}))+"; 
var result = Regex.Matches("=F2=0B=E2some text =C2=A3", pattern) 
      .Cast<Match>().Select(p => p.Groups[2].Captures) 
      .ToList(); 
foreach (var coll in result) 
    foreach (var v in coll) 
     Console.WriteLine(v); 
+0

Спасибо большое! Значит, это возможно только тогда в .NET? – silkfire

+0

Из того, что я знаю, это также возможно в модуле PyPi Python * regex *, но я никогда не использовал его. Просто заметьте, я немного сократил ваше регулярное выражение, используя ограничивающий квантификатор '{2}', чтобы не повторять '[0-9A-F]'. –

Смежные вопросы