私はあなたが正規表現の代わりにYAMLを解析するのが非常に簡単なので、データ形式を制御できるかどうか質問しました。
唯一の問題は、オブジェクトがうまく形成されていないということです。
1)は、例えばregions
オブジェクトを取る、それがlayer
それらのすべてと呼ばれる多くの属性を持っています。あなたの意図は、同じ名前の多くのプロパティの代わりにlayer
のリストを作成することだと思います。
2)対応する値を持つそれぞれのlayer
プロパティを検討してください。各layer
の後には、私が各層に属する孤児属性があります。
これらの考えを念頭に置いてください。 YAMLの規則にしたがってオブジェクトを作成すると、それを解析するのは簡単です。
私はあなたがOctaveで作業していることを知っていますが、私がデータに加えた変更と、それを解析するのがどれほど簡単であるかは、この場合はpythonです。
DATAあなたは今、あなたのオブジェクトが解析され得るだけでこれらの命令でYAML構文
case :
name : tandem solar cell
options :
verbose : true
t_stamp : system # a sample comment
units :
energy : eV
length : nm
time : s
tension : V
temperature: K
mqty : mole
light : cd
regions :
- layer : Glass # ADDED THE - TO MAKE IT A LIST OF LAYERS
geometry : # AND KEEP INDENTATION PROPERLY
thick : 80 nm
npoints : 10
optical :
nk_file : vacuum.txt
- layer : FTO
geometry:
thick : 10 nm
npoints : 10
optical :
nk_file : vacuum.txt
に準拠するために、DATA変形
case :
name : tandem solar cell
options :
verbose : true
t_stamp : system
units :
energy : eV
length : nm
time : s
tension : V
temperature: K
mqty : mole
light : cd
regions :
layer : Glass
geometry:
thick : 80 nm
npoints : 10
optical :
nk_file : vacuum.txt
layer : FTO
geometry:
thick : 10 nm
npoints : 10
optical :
nk_file : vacuum.txt
ITを持っているように:
import yaml
data = yaml.load(text)
""" your data would be parsed as:
{'case': {'name': 'tandem solar cell',
'options': {'t_stamp': 'system', 'verbose': True},
'regions': [{'geometry': {'npoints': 10, 'thick': '80 nm'},
'layer': 'Glass',
'optical': {'nk_file': 'vacuum.txt'}},
{'geometry': {'npoints': 10, 'thick': '10 nm'},
'layer': 'FTO',
'optical': {'nk_file': 'vacuum.txt'}}],
'units': {'energy': 'eV',
'length': 'nm',
'light': 'cd',
'mqty': 'mole',
'temperature': 'K',
'tension': 'V',
'time': 's'}}}
"""
あなたはfiを生産していますか?あなたが解析したいファイル、または例のようにそれを受け取っていますか? – chapelo
私はそれを作成しますが、エンドユーザーは独自のパラメータで変更する必要がありますので、できるだけ単純で人間が読めるようにしておきたいと思います。 –
PCREはキャプチャスタックをサポートしていないので、これで得られるのは、大文字と小文字の区別がついたものだけです。その後、値を分割して、同じ正規表現に対して再度一致させる必要があります。私はあなたが手動で簡単なパーサーを書いてそれを行うことが最善の策だと思います。 –