Wpis z mikrobloga

#programowanie #python #regexp
Powiedzmy, że mam sobie drzewo binarne liczb całkowitych zapisanych w stringu za pomocą nawiasów. Np.: "((- 1 -) 0 (((- 1 -) 1 (- 1 -)) 0 (- 0 -)))" czyli drzewo to "-" lub "(lewePoddrzewo liczba prawePoddrzewo)". Jest jakieś wyrażenie regularne które da mi trzy grupy dla niepustego drzewa tak, żeby się nawiasy zgadzały? Próbowałem czegoś takiego:
r'\((\(.+\)|-) (\d+) (\(.+\)|-)\)' ale dostałem grupy:

(- 1 -) 0 (((- 1 -) 1 (- 1 -))
0
(- 0 -))
  • 12
@NotABigFan: Jak przelecisz przez string i nawiasy przerobisz na tokeny z oznaczeniem poziomu zagnieżdżenia - np. jakieś (1| ... (2|....|2) ...|1)(1|...|1) to później zbudujesz drzewo rekursywnie łatwym wyrażeniem.
@NotABigFan: szczerze to nie sądzę żeby dało się to zrobić regexem, jest zbyt prosty. Regex działa w taki sposób że idzie od lewej do prawej i próbuje dopasować wzorzec, a tutaj musiałby liczyć jeszcze dodatkowo ile po drodze miał nawiasów otwierających i zamykających żeby wiedzieć kiedy skończy się lewePoddrzewo. Jeżeli znasz maksymalną wysokość drzewa to może wtedy dałoby się, ale to będzie monstrum.
@asciiterror: Z tego co ustaliłem w 're' się nie da ale moduł 'regex' wprowadził rekurencyjne dopasowania wzorem tych z perla i próbuje coś z tego sklecić. ?> dopasowuje tylko pierwszy zamykający nawias więc odpada