【发布时间】:2021-11-18 02:52:41
【问题描述】:
我想用 ruby 完成以下任务,如果可能的话,还可以使用正则表达式:
输入:"something {\"key\":\"value\",\"key2\":3}"
输出:[["\"key\"", "\"value\""], [["\"key2\"", "3"]]
到目前为止我的尝试:
s = "something {key:\"value\",key2:3}"
s.scan(/.* {(?:([^:]+):([^,}]+),?)+}$/)
# Output: [["\"key2\"", "3"]]
由于某种原因,上面的正则表达式只匹配最后一个键值对。有人知道如何检索所有对吗?
为了清楚起见,“某物”可以是任何类型的字符串。出于这个原因,诸如 (1) 将文本直接拆分为等号或 (2) s.scan(/(?:([^:]+):([^,}]+),?)/) 中使用的正则表达式等解决方案对我不起作用。
我知道在 SO 上有类似的问题。尽管如此,据我所见,他们大多倾向于解决方案 1 和 2,或者专注于单个键值对。
【问题讨论】: