Jestem zainteresowany tym, jak można zaimplementować dopasowanie rekursywnego wyrażenia regularnego w Pythonie (nie znalazłem żadnych przykładów :(). Na przykład w jaki sposób można napisać wyrażenie, które pasuje do "wyrównanego nawiasu", takiego jak "foo (bar (bar")))) (foo1) bar1"W jaki sposób można zaimplementować rekurencyjne wyrażenie regularne w pythonie?
Odpowiedz
Niestety nie sądzę Pythona wyrażenia regularne wsparcie rekurencyjnych wzorców
prawdopodobnie można analizować je z czymś pyparsing. http://pyparsing.wikispaces.com/
Powiedziałbym, na szczęście ... – pillmuncher
nie można zrobić go z wyrażeń regularnych Python nie obsługuje rekursywnego wyrażenia regularnego
You przydałby pyparsing
#!/usr/bin/env python
from pyparsing import nestedExpr
import sys
astring=sys.argv[1]
if not astring.startswith('('):
astring='('+astring+')'
expr = nestedExpr('(', ')')
result=expr.parseString(astring).asList()[0]
print(result)
Running to daje:
% test.py "foo(bar(bar(foo)))(foo1)bar1"
['foo', ['bar', ['bar', ['foo']]], ['foo1'], 'bar1']
To stara sprawa, ale dla ludzi, którzy przychodzą tutaj przez wyszukiwań:
Istnieje alternatywny moduł regex dla Pythona, dokłada obsługa szablonów rekursywnych: https://pypi.python.org/pypi/regex
Ma wiele innych udoskonaleń na re
.
Niesamowite nowy silnik! Przyzwoite rekursje nareszcie :) Dzięki. –
Czy ten silnik zostanie w pewnym momencie połączony ze stdlib Pythona? Nie mogę znaleźć żadnej niedawnej rozmowy na ten temat. –
Ta odpowiedź naprawdę skorzystałaby z przykładu! :) –
Napisałbym do tego parser. – Geo
@Tempus, w rzeczy samej, albo Tony przyjdzie. http://stackoverflow.com/a/1732454/193892 –
@AmigableClarkKant w porządku, znam Tony'ego. Jest przyjacielem. – Geo