数値 0.0、0.64 および 0.08、0.72 を収集して変数に入れるにはどうすればよいですか? 文字列は次のようになります
{"object" "rectangle" "param1" {"Type1" "Type2"} "param2" {{0.0 0.64} {0.08 0.72}} "smth" 0 "point1" 0 "point2" }
私はPythonでこれをやろうとしています
これらの数値を取得する方法は次のとおりです。
>>> from re import findall
>>> mystr = """
... {"object" "rectangle" "param1" {"Type1" "Type2"} "param2" {{0.0 0.64} {0.08 0.72}} "smth" 0 "point1" 0 "point2" }
... """
>>> findall("-?\d+\.\d+", mystr)
['0.0', '0.64', '0.08', '0.72']
>>> var1, var2, var3, var4 = findall("-?\d+\.\d+", mystr)
>>> var1
'0.0'
>>> var4
'0.72'
>>>
または、フロートとして使用する場合は、次のようにします。
>>> var1, var2, var3, var4 = map(float, findall("-?\d+\.\d+", mystr))
>>> var1
0.0
>>> var4
0.72
>>>
最後に、正規表現パターンの内訳を次に示します。
-? # An optional hyphen (for negative numbers)
\d+ # One or more digits
\. # A period (the decimal point)
\d+ # One or more digits
これは JSON タイプのファイルに似ていますが、完全ではありません。JSON
Pythonの組み込みライブラリを使用して適切にフォーマットされたものを入手できれば、人生は楽になるかもしれません。ただし、常に同じタイプの形式である場合は、この正規表現を数えて、手早く汚い仕事をすることができます。
data = """"{"object" "rectangle" "param1" {"Type1" "Type2"} "param2" {{0.0 0.64} {0.08 0.72}} "smth" 0 "point1" 0 "point2" }"""
r = re.compile('"param2" {{(\d+\.\d+) (\d+\.\d+)} {(\d+\.\d+) (\d+\.\d+)}}')
m = r.search(data)
[float(m.group(i)) for i in range(1,5)]
出力:
[0.0, 0.64, 0.08, 0.72]