regex 简单的JSON对象,使用正则表达式解析文本[重复]

yzckvree  于 2023-10-22  发布在  其他
关注(0)|答案(1)|浏览(104)

此问题已在此处有答案

Parsing JSON in Excel VBA(11个回答)
26天前关闭
我正在尝试解析一个简单的JSON对象。
{"difficult:name and value with commas":"99,9%;100,00%","b":"very important value","date":"01/01/2023 21:00:00","object members":4}
我的模式"([^\[\]\{\}]+)":"*([^\[\]\{\}]+)"*没有返回我期望的结果。
通过排除符号"[]{}",我想排除包含数组或对象的值,我只需要一个简单的值对。
我想有四个匹配和两个子匹配(名称,值)的每个匹配。
| 匹配|子匹配1|子匹配2|评论|
| --|--|--|--|
| “困难:名称和值带逗号”:“99,9%;百分之一百”|困难:名称和值带逗号|99.9%; 100.00%| name和一个字符串值,我想得到不带引号的“",但这是一个猜测,值可能包含内部引号|
| “B”:“非常重要的价值”|B|非常重要的价值|此外,如果不受JSON标准的限制,它可以是值内的逗号|
| “日期”:“01/01/2023 21:00:00”|日期|2023年1月1日21:00:00||
| “对象成员”:4|对象成员| 4 ||
这是我在https://regex101.com/的折磨的结果:

我用的是“”,但更多的是关于模式。

ebdffaop

ebdffaop1#

这可能会起作用:

"([^"]+)":("([^"]+)"|([^,]+))(?=,|})

这是你在Python中使用它的方式:

import re

json_str = '{"difficult:name and value with commas":"99,9%;100,00%","b":"very important value","date":"01/01/2023 21:00:00","object members":4}'
pattern = r'"([^"]+)":("([^"]+)"|([^,]+))(?=,|})'
matches = re.findall(pattern, json_str)

for match in matches:
    key = match[0]
    value = match[2] if match[2] else match[3]
    print(f'Key: {key}, Value: {value}')

你可以在here上查看
但是使用专用的JSON解析器解析JSON通常比使用正则表达式更快,更有效。
下面是一个如何在Python中解析JSON的例子:

import json

json_str = '{"difficult:name and value with commas":"99,9%;100,00%","b":"very important value","date":"01/01/2023 21:00:00","object members":4}'

data = json.loads(json_str)
for key, value in data.items():
    print(f'Key: {key}, Value: {value}')

相关问题