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! :) –
- 1. Jak mogę debugować wyrażenie regularne w Pythonie?
- 2. W jaki sposób można zaimplementować kamerę FPS?
- 3. Generatory rekurencyjne w Pythonie
- 4. Lepszy sposób na wyrażenie regularne
- 5. wyrażenie regularne w iOS
- 6. Wyrażenie regularne w skrypcie Bash
- 7. Wyrażenie regularne w celu dopasowania "|"
- 8. Wyrażenie regularne w funkcji indeksu
- 9. W jaki sposób można zaimplementować naprawdę asynchroniczny wątek Javy
- 10. Jak napisać wyrażenie rekurencyjne odpowiadające zagnieżdżonym nawiasom?
- 11. Jak komentować wyrażenie regularne Perl?
- 12. W jaki sposób pionowe paski literalne określają formalny wyrażenie regularne w python?
- 13. Python string.replace wyrażenie regularne
- 14. debugowania Perl Wyrażenie regularne
- 15. W jaki sposób zaimplementować tajne menu?
- 16. C#: W jaki sposób należy zaimplementować ToString()?
- 17. Jak dekompilować wyrażenie regularne?
- 18. W jaki sposób wyrażenie warunkowe porównuje łańcuchy?
- 19. Wyrażenie regularne w celu wyszukania spacji
- 20. Wyrażenie regularne Python nie pasujące
- 21. wyrażenie regularne przechodzi w nieskończonej pętli
- 22. W jaki sposób ** zostało zaimplementowane w Pythonie?
- 23. Wyrażenie regularne równoważne chomp
- 24. Wyrażenie regularne lookbehind problemem
- 25. c Wyrażenie regularne howto
- 26. Wyrażenie regularne zastępuje
- 27. Wyrażenie regularne Wildcard Matching
- 28. Wyrażenie regularne negatywne mecz
- 29. MSSQL Wyrażenie regularne
- 30. Wyrażenie regularne do analizowania CSV w PHP
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