2009-11-01 31 views
14

私はPythonでどのように再帰的な正規表現のマッチングを実装することができますか(私は例を見つけていませんでした:(例えば、 "foo(bar(bar(foo )))(foo1は)BAR1"どのように再帰正規表現をPythonで実装することができますか?

+4

私はこれのためのパーサを書いています。 – Geo

+1

@Tempus、確かに、またはトニーが来るでしょう。 http://stackoverflow.com/a/1732454/193892 –

+1

@AmigableClarkKantそれは大丈夫です、私はトニーを知っています。彼は友人です。 – Geo

答えて

3

残念ながら、私はPythonの正規表現は、再帰的なパターンをサポートしていないと思います

おそらくpyparsingのようなもので、それを解析することができます。http://pyparsing.wikispaces.com/

+1

私は、幸いにも、言っていただろう... – pillmuncher

4

あなたはでそれを行うことはできません正規表現。Pythonは再帰正規表現をサポートしていません。

15

あなた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) 

を使用することができます実行することが得られます。

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

これは古い質問ですが、検索してここに来る人のために:

ないのpythonのための代替正規表現モジュールがあります

再帰パターンをサポートします: https://pypi.python.org/pypi/regex

そして、それはre

+1

すごい新しいエンジン!最後にまともな再帰:)ありがとう。 –

+2

このエンジンはある時点でpythonのstdlibにマージされますか?私はこれについての最近の会話を見つけることができないようです。 –

+1

この回答は実際には例の恩恵を受けるでしょう! :) –

関連する問題