0

数値 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でこれをやろうとしています

4

2 に答える 2

1

これらの数値を取得する方法は次のとおりです。

>>> 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
于 2013-11-08T16:16:07.057 に答える
1

これは JSON タイプのファイルに似ていますが、完全ではありません。JSONPythonの組み込みライブラリを使用して適切にフォーマットされたものを入手できれば、人生は楽になるかもしれません。ただし、常に同じタイプの形式である場合は、この正規表現を数えて、手早く汚い仕事をすることができます。

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]
于 2013-11-08T16:22:20.617 に答える