И вот форма метода запроса.
List<Line> parentLineList =
content.ChildControls.OfType<TabSections>()
.SelectMany(t => t.ChildControls.OfType<Paragraph>())
.SelectMany(p => p.ChildControls.OfType<Line>())
.ToList();
Вы не можете сделать это обычно, используя регулярные выражения Python. (Регулярные выражения .NET были расширены с помощью «балансирующих групп», что позволяет использовать вложенные совпадения.)
Однако PyParsing - очень хороший пакет для этого типа вещей:
from pyparsing import nestedExpr
data = "( (a ( ( c ) b ) ) ( d ) e )"
print nestedExpr().parseString(data).asList()
Результат:
[[['a', [['c'], 'b']], ['d'], 'e']]
Подробнее о PyParsing:
Регулярные выражения не могут анализировать вложенные структуры. Вложенные структуры по определению не являются регулярными. Они не могут быть построены с помощью регулярной грамматики, и они не могут быть проанализированы с помощью конечного автомата (регулярное выражение можно рассматривать как сокращенную запись для FSA).
Сегодняшние механизмы «регулярных выражений» иногда поддерживают некоторую ограниченную «вложенность» конструкции, но с технической точки зрения их больше нельзя называть "обычными".
Python не поддерживает рекурсию в регулярных выражениях. Таким образом, эквиваленты групп балансировки .NET или регулярного выражения PCRE в Perl не сразу возможны в Python.
Как вы сами сказали: это НЕ проблема, которую вы действительно должны решать с помощью одного регулярного выражения.
Вы говорите о рекурсии? Это не ясно из вашего вопроса. Пример:
ActivePython 2.6.1.1 (ActiveState Software Inc.) based on
Python 2.6.1 (r261:67515, Dec 5 2008, 13:58:38) [MSC v.1500 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import re
>>> p = re.compile(r"((\w+((\d+)[.;]))(\s+)\d)")
>>> m = p.match("Fred99. \t9")
>>> m
<_sre.SRE_Match object at 0x00454F80>
>>> m.groups()
('Fred99. \t9', 'Fred99.', '9.', '9', ' \t')
Показывает соответствие вложенных групп. Нумерация групп зависит от порядка, в котором их открывающие скобки встречаются в шаблоне.
Я бы порекомендовал удалить вложенность из самого регулярного выражения, перебирать результаты и выполнять с ними регулярные выражения.