2011-07-22 8 views
1
pattern = '^([R][uU][nN])(.*)\((.*)\).' 

基本的に私はこれを行うにしようとしていますどのような手順は、私が形に持っているデータに呼び出す見つけるされています正規表現の簡単な複数行の質問

RUN proc-name-can-be-anything (input parameters, input, output). 

も使用できます

RUN proc-name-long 
        ( 
        input parameter, 
        other parameter, 
        one_more_just_because 
       ). 

パターンは一行のインスタンスでうまく動作します。私はマルチラインに対応できるようにする必要があります。私はPythonと正規表現に戻って私の髪を引き裂いています。 e "。"は改行ではありません)。私が本当に気にしているのは、私が見ているプロシージャコールのパラメータです。

おかげ

+0

は、具体的には、この懸念のPythonの正規表現をしていますか? – BoltClock

+0

はい、これはPythonの正規表現です –

答えて

3

http://docs.python.org/library/re.html#re.S
http://docs.python.org/library/re.html#re.DOTALL

'.'特殊文字が改行

含め、すべてで任意の文字に一致させるそして、あなたは前に付けて、正規表現でこれを含めることができますパターン文字列'(?s)'

また、パターン文字列と一緒に生の文字列構文を使用することを忘れないでください。私は与えられたようにあなたの例に何か問題があるとは思わないが、それはちょうど自己リマインダとしてそれらを使用することは常に良い考えです。

だから、pattern = r'(?s)^([R][uU][nN])(.*)\((.*)\).'のような何かがこのトリックを行う必要があります。

1
import re 

ss = '''RUN proc-name (input parameter, 
         other parameter, 
         one_more_just_because).''' 

regx = re.compile('^(R[Uu][Nn]) +(.+?) *\((.*?)\)\.',re.MULTILINE|re.DOTALL) 

print regx.search(ss).groups() 

あなたがre.DOTALLを使用したくない場合は、あなたも行うことができます。

import re 

ss = '''RUN proc-name (input parameter, 
         other parameter, 
         one_more_just_because).''' 


regx = re.compile('^(R[Uu][Nn]) +(.+?) *\(([\s\S]*?)\)\.',re.MULTILINE) 

print regx.search(ss).groups()