Извлечь часть данных из json с помощью регулярного выражения? - PullRequest
0 голосов
/ 29 мая 2020

Мой json выглядит так.

{"d":2,"g":"(0.006, 1.000, -0.013, 0.584)","o":"0.081","t":"{\"Items\":[{\"f\":9,\"b\":{\"i\":72057594037929100,\"j\":[{\"s\":2,\"p\":\"(4.342, 76.616, 235.211)\",\"q\":\"(0.5, 0.2)\",\"o\":\"(0.000, 0.000, 0.000, 0.000)\"},{\"s\":2,\"p\":\"(6.307, 63.818, 237.308)\",\"q\":\"(0.5, 0.3)\",\"o\":\"(0.009, 0.988, -0.075, -0.137)\"},{\"s\":2,\"p\":\"(-6.896, 54.626, 241.427)\",\"q\":\"(0.5, 0.3)\",\"o\":\"(0.780, -0.615, -0.055, 0.103)\"},{\"s\":2,\"p\":\"(19.263, 53.431, 233.939)\",\"q\":\"(0.6, 0.3)\",\"o\":\"(0.790, 0.587, -0.161, -0.071)\"},{\"s\":2,\"p\":\"(-9.756, 36.885, 247.644)\",\"q\":\"(0.5, 0.4)\",\"o\":\"(0.708, -0.170, -0.682, 0.067)\"},{\"s\":2,\"p\":\"(32.613, 40.022, 228.385)\",\"q\":\"(0.6, 0.3)\",\"o\":\"(0.869, 0.301, 0.292, -0.263)\"},{\"s\":2,\"p\":\"(-10.174, 26.525, 230.599)\",\"q\":\"(0.5, 0.4)\",\"o\":\"(0.838, -0.145, 0.238, -0.468)\"},{\"s\":2,\"p\":\"(18.386, 34.191, 215.852)\",\"q\":\"(0.6, 0.3)\",\"o\":\"(-0.159, -0.297, 0.789, 0.515)\"},{\"s\":2,\"p\":\"(-8.486, 24.193, 232.817)\",\"q\":\"(0.5, 0.4)\",\"o\":\"(0.310, 0.404, 0.851, -0.126)\"},{\"s\":2,\"p\":\"(18.643, 35.331, 216.844)\",\"q\":\"(0.6, 0.3)\",\"o\":\"(0.296, -0.315, -0.201, 0.879)\"},{\"s\":2,\"p\":\"(6.328, 57.728, 238.241)\",\"q\":\"(0.5, 0.3)\",\"o\":\"(0.006, 0.989, -0.054, -0.137)\"},{\"s\":2,\"p\":\"(6.372, 39.007, 240.290)\",\"q\":\"(0.5, 0.3)\",\"o\":\"(0.004, 0.990, -0.038, -0.136)\"},{\"s\":2,\"p\":\"(6.421, 13.412, 242.259)\",\"q\":\"(0.5, 0.4)\",\"o\":\"(0.004, 0.990, -0.038, -0.135)\"},{\"s\":2,\"p\":\"(0.544, 13.591, 240.701)\",\"q\":\"(0.5, 0.4)\",\"o\":\"(-0.687, 0.714, -0.116, 0.066)\"},{\"s\":2,\"p\":\"(12.142, 12.902, 237.523)\",\"q\":\"(0.5, 0.4)\",\"o\":\"(0.680, 0.649, -0.268, -0.212)\"},{\"s\":2,\"p\":\"(-8.352, -7.874, 228.395)\",\"q\":\"(0.5, 0.5)\",\"o\":\"(-0.438, -0.137, 0.847, 0.270)\"},{\"s\":2,\"p\":\"(12.378, -15.666, 235.192)\",\"q\":\"(0.5, 0.5)\",\"o\":\"(0.794, -0.021, 0.606, -0.035)\"},{\"s\":2,\"p\":\"(-1.073, -37.353, 238.874)\",\"q\":\"(0.5, 0.6)\",\"o\":\"(-0.659, 0.050, 0.717, -0.222)\"},{\"s\":2,\"p\":\"(15.474, -46.941, 242.354)\",

И я хочу извлечь только числа, начинающиеся внутри "p\":, например "p\":\"(4.342, 76.616, 235.211)\"

Я пробовал использовать регулярное выражение, но он возвращает нулевой вывод.

Код, который я пытался запустить

import re

with open('skeleton.json') as file:

    for line in file:
       headings = re.search('\\\"p\\\":\\\"\([\d, \-.]+\)\\\"', line)
       print(headings)

Ответы [ 2 ]

0 голосов
/ 29 мая 2020

Может быть, это регулярное выражение подойдет вам?

/\\"p\\":\\"\((.+?)\)\\"/

Протестировано здесь: https://regexr.com/55kah

0 голосов
/ 29 мая 2020

Попробуйте поискать \\\\\"p\\\\\":\\\\\"\([\d, \-.]+\)\\\\\". Что-то вроде re.search('\\\\\"p\\\\\":\\\\\"\([\d, \-.]+\)\\\\\"', XXX), где XXX - это ваш json.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...