Matlab:通过插入当前匹配项的一部分,用regexprep替换字符串

时间:2018-06-26 16:50:34

标签: regex matlab

我有一个格式为

的字符串

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

如何只插入当前正则表达式的一部分,而不是插入当前匹配项的输入文本的空洞部分?

1 个答案:

答案 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"}}'