我有一个格式为
的字符串 a = '{header:Header { length: 3, number: two, month: april }, holiday : summerholiday {holiday:france}}'
在此字符串上,我想使用Matlab的jsondecode
函数,因此我需要使用以下格式的字符串:
a_desired = '{"header": {"length":"3", "number":"two", "month":"april"}, "holiday": {"holiday" : "france"}}'
我需要删除字符串中的每个单词,然后删除: word {
(作为Header和summerholiday)。
我的想法:
a = '{header:Header {length:3, number:two, month:april}, holiday : summerholiday: {holiday : france}}';
exp = '\w*:\w* {';
str_json = regexprep(a, exp, '$&' );
// nothing changes, because I insert the same string I want to replace
如何只插入当前正则表达式的一部分,而不是插入当前匹配项的输入文本的空洞部分?
答案 0 :(得分:1)
您可以分两步获得所需的输出。
1。从字符串中删除不需要的单词。
a_desired = regexprep(a,'(:)\s?[a-zA-Z]*\s*({)','$1 $2')
正则表达式解释:
(:)
匹配一个半冒号并将其捕获。
\s?[a-zA-Z]*
可选地匹配空格,后跟一个单词。
\s*
匹配任何空格
({)
匹配一个中括号并将其捕获在第二组中。
将匹配的模式替换为$1
(第一个捕获的组,空白)和$2
,第二个捕获的组。
2。将每个单词都用双引号引起来。
a_desired = regexprep(a_desired,'(\w*)','"$1"')
(\w*)
匹配任何单词并将其捕获。将匹配的模式替换为捕获的组$ 1,并用双引号引起来。
最终输出:
a_desired = '{"header": {"length":"3", "number":"two", "month":"april"}, "holiday": {"holiday" : "france"}}'