Mi interessa come può essere implementato corrispondenza regexp ricorsiva in Python (non ho trovato alcun esempio :(). Per esempio come si potrebbe scrivere un'espressione che corrisponde a "staffa equilibrato" stringa come "foo (bar (bar (foo))) (foo1) bar1"Come può essere implementata una espressione regexp ricorsiva in python?
risposta
Purtroppo non credo espressioni regolari di Python supportano modelli ricorsivi
probabilmente si può analizzarlo con qualcosa di simile pyparsing:. http://pyparsing.wikispaces.com/
Avrei detto, per fortuna ... – pillmuncher
non puoi farlo con un regexp. Python non supporta regexp ricorsiva
È potrebbe usare 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)
Esecuzione cede:
% test.py "foo(bar(bar(foo)))(foo1)bar1"
['foo', ['bar', ['bar', ['foo']]], ['foo1'], 'bar1']
Questa è una vecchia questione, ma per le persone che vengono qui, attraverso ricerche:
C'è un modulo regex alternativa per Python che fa supporta i pattern ricorsivi:
E ha molti altri miglioramenti su re
.
Nuovo motore impressionante! Recente decente finalmente :) Grazie. –
A un certo punto, questo motore verrà integrato nello stdlib di python? Non riesco a trovare alcuna conversazione recente su questo. –
Questa risposta potrebbe davvero beneficiare di un esempio! :) –
- 1. Esiste qualcosa come una classe che può essere implementata?
- 2. Perché una grammatica LL non può essere lasciata ricorsiva?
- 3. espressione Scalastyle booleana può essere semplificata
- 4. Composable Regexp in Python
- 5. RegExp per convalidare una formula (espressione matematica con parentesi abbinate)?
- 6. Perché l'oggetto istream può essere usato come espressione bool?
- 7. Generici Java: perché l'interfaccia interna non può essere implementata da una superinterfaccia (interna)?
- 8. Come definire un'interfaccia f # asincrona che può essere implementata in C#?
- 9. Lettura dati ricorsiva in Python
- 10. Somma sottoinsieme ricorsiva in Python
- 11. Come presentare una raccolta ricorsiva in JSP
- 12. non può lanciare a interfaccia implementata
- 13. Cartella ricorsiva Python letta
- 14. Conversione di nuove righe in paragrafo/tag HTML, può essere una singola espressione regolare?
- 15. android retrolambda, statement lambda può essere sostituito con espressione lambda
- 16. L'operatore "nameof", "espressione non può essere utilizzato in una discussione a nameof"
- 17. RegExp espressione regolare trovare e sostituire parole intere solo
- 18. Come convertire una funzione ricorsiva per utilizzare uno stack?
- 19. Converti una stringa in espressione regolare rubino
- 20. Come può (1 +) essere mai una funzione?
- 21. Elimina una proprietà di un dizionario in Python che può essere o non essere presente
- 22. Come potrebbe essere implementata una classe come ConcurrentBag di .NET <T>?
- 23. selectionArgs in ContentResolver.query (...) può essere una sottoquery?
- 24. Composizione regexp?
- 25. Questa funzionalità può essere implementata con il sistema di tipi Haskell?
- 26. Combinare Regexp
- 27. Regex con espressione ricorsiva per abbinare le parentesi graffe nidificate?
- 28. Come può un modulo Python essere importato da un URL?
- 29. ricorsiva profondità di dizionario Python
- 30. Python: è possibile mixare il generatore e una funzione ricorsiva?
Scriverò un parser per questo. – Geo
@Tempus, in effetti, o Tony arriverà. http://stackoverflow.com/a/1732454/193892 –
@AmigableClarkKant va bene, conosco Tony. È un amico. – Geo