2009-11-01 13 views
14

Python'da yinelemeli regexp uyumu nasıl gerçekleştirilebileceğiyle ilgileniyorum (herhangi bir örnek bulamadım :() Örneğin, "foo (bar (bar (foo)" gibi "parantez dengeli" dizgisiyle eşleşen bir ifade nasıl yazılır))) (foo1) bar1" ne yazık ki Python'ın regexpleri özyinelemeli kalıplarını destekleyen sanmıyorumPython'da nasıl tekrarlı bir regexp uygulanabilir?

+4

Bunun için bir ayrıştırıcı yazardım. – Geo

+1

@Tempus, ya da Tony gelecek. http://stackoverflow.com/a/1732454/193892 –

+1

@AmigableClarkKant tamam, Tony'yi tanıyorum. O bir arkadaş. – Geo

cevap

4

Python, yinelemeli regexp'i desteklemez.

15

Siz 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) 

kullanabilirsiniz Koşu o verir:

% test.py "foo(bar(bar(foo)))(foo1)bar1" 
['foo', ['bar', ['bar', ['foo']]], ['foo1'], 'bar1'] 
11

Bu eski bir sorudur, ancak aramaların aracılığıyla buraya gelen insanlar için:

yapar piton için alternatif düzenli ifade modülü var

özyinelemelerini destekleyin: https://pypi.python.org/pypi/regex

'da çok daha güzel iyileştirmeler var..

+1

Başar yeni motor! Sonunda iyi özyinelik :) Teşekkürler. –

+2

Bu motor bir noktada python'un stdlib'iyle birleştirilecek mi? Bununla ilgili hiç bir görüşme bulamıyorum. –

+1

Bu cevap bir örnekten gerçekten yararlanır! :) –