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 类型的文件,但不完全是。如果您可以使用 python 的内置JSON库正确格式化它,生活可能会更轻松。但是,如果它始终是相同类型的格式,您可以指望这个正则表达式来完成一项快速而肮脏的工作:

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 回答