0

古いテンプレート エンジン スキーマからデータを抽出するスクリプトを作成しています。

[%price%]
{
$54.99
}
[%/price%]

[%model%]
{
WRT54G
}
[%/model%]

[%brand%]{
LINKSYS
}
[%/brand%]

[% %] 内のすべてがキーで、{ } 内のすべてが値です。Python と正規表現を使用して、ここまで取得できました: (?<=[%)(?P\w*?)(?=\%])

['price', 'model', 'brand'] を返す

ブラケットデータを値として一致させるのに問題があります

4

3 に答える 3

4

私は、単一の正規表現が最善の解決策ではないという Devin に同意します。正規表現で処理されない奇妙なケースが発生した場合、見つけられないという本当のリスクがあります。

有限状態マシンのアプローチを使用することをお勧めします。最初に price-model-brand ブロックを探して、ファイルを行ごとに解析し、次に中括弧内にあるものを解析します。また、ブロックが正しく開いたり閉じたりしていないかどうかを確認してください。これらはおそらく不正な形式です。

このようなものは、Python で約 30 ~ 40 行のコードで記述できるはずです。

于 2009-03-29T22:34:29.697 に答える
0

re.Scanner単一の正規表現を使用するよりも (残念ながら文書化されていない)方が簡単なようです。

于 2009-03-29T22:27:23.050 に答える
0

にやにや笑いのために:

import re
RE_kv = re.compile("\[%(.*)%\].*?\n?\s*{\s*(.*)")
matches = re.findall(RE_kv, test, re.M)
for k, v in matches:
    print k, v

出力:

price $54.99
model WRT54G
brand LINKSYS

一致を表示するのに十分な正規表現を行ったことに注意してください。閉じ括弧の最後で制限されていません。自己責任。

于 2009-03-29T22:52:13.600 に答える