2009-11-01 11 views
14

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?

+4

Scriverò un parser per questo. – Geo

+1

@Tempus, in effetti, o Tony arriverà. http://stackoverflow.com/a/1732454/193892 –

+1

@AmigableClarkKant va bene, conosco Tony. È un amico. – Geo

risposta

3

Purtroppo non credo espressioni regolari di Python supportano modelli ricorsivi

probabilmente si può analizzarlo con qualcosa di simile pyparsing:. http://pyparsing.wikispaces.com/

+1

Avrei detto, per fortuna ... – pillmuncher

4

non puoi farlo con un regexp. Python non supporta regexp ricorsiva

15

È 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'] 
11

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.

+1

Nuovo motore impressionante! Recente decente finalmente :) Grazie. –

+2

A un certo punto, questo motore verrà integrato nello stdlib di python? Non riesco a trovare alcuna conversazione recente su questo. –

+1

Questa risposta potrebbe davvero beneficiare di un esempio! :) –

Problemi correlati