2017-02-07 4 views
0

Fortranでは、data文は「data」という単語で始まり、その後に配列の名前が続き、その後に配列の値が挟まれます2つのスラッシュ "/"の間。上記で2文字の間にある単語を含まないものと一致するPythonの正規表現

pattern_data = r''' 
(data [^/]+/[^/]+ /) 
''' 

c = "data plevel = /4.56, 234., 1e-45/ data tlayer/-5.6, +290.098/" 

c私は抽出したい2つのデータステートメントを含むサンプルFortranコードのようなものです。 pattern_dataは、 "data"で始まり、 "/"以外の文字、 "/"、 "/"、 "/"の後に続けて続くサブストリングに一致する正規表現です。

これは与えて、動作しているようです:

regex = re.compile(pattern_data, re.VERBOSE) 

regex.findall(c) 
['data plevel = /4.56, 234., 1e-45/', 'data tlayer/-5.6, +290.098/'] 

しかし何私が代わりに言いたかった場合:他のものに続いて「/」、「/」に続く以外に続いて「データ」を、 「データ」より後に「/」が続きます。私はこれもデータステートメントと一致すると思いますが、「何も」の正規表現は何ですか?

data [^/]+/(?<! data).*/

をしかし、これは文字列全体cに一致します。

私はこのような負の後読みを使用して試してみました。

答えて

0

あなたの試みでは、最初のスラッシュの直前にあるdataが禁止されます。これはあなたが望むものではありません。このテストdataはどこでもスラッシュの間にあるかどうか:

(data [^/]+/(?! [^/]* data) [^/]+ /) 
+0

は、2「/」sの間で「[^ /]」持たないようにすることができませんか? – Jack

+0

先読みも同様に境界を設定する必要があります。 '/(?!。*?data)。*?/'であれば、'/1、2、3/data'は失格となります。 – Amadan

関連する問題