Matlab:通过插入当前匹配的部分,将字符串替换为regexprep
我有一个字符串的格式:Matlab:通过插入当前匹配的部分,将字符串替换为regexprep,regex,matlab,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”}' 我
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{
(作为标题和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.从字符串中删除不需要的单词。
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*)
a_desired='{“header”:{“length”:“3”,“number”:“two”,“month”:“april”},“holiday”:{“holiday”:“france”}}
非常感谢!是否可以在下一个括号{?是否有更简单的方法:match=regexp(a),\w*(\w*?)(\s?)(\w*?)(\s?)(\w*?)(\s?)(\w*)(\s?)(\s?)(\w*)(\s?)(\s?)@米里,你可以使用<代码>(\W*.s)*/Case>来捕获该组贪婪的人。当原始问题得到解决时,请回答我,并考虑如果你发现它有用的话,请进行投票。抱歉,这是我最后一个问题:作为我1小时前的问题的扩展:如果我想找到与字符串之间的空洞内容匹配的话。description“和一个括号{,但在这两个标记之间,不仅有未知的单词,还有符号/;。(,还有使用regexp的解决方案吗?不用担心。你能分享这种情况下的预期输入和输出吗?更容易理解你的意思:)。这是我的输入:a=testphase:{comand:{inputcheck:““,num:2000,详细信息:已达到开始阶段,初始}
或b=testphase:{comand:{inputcheck:”,num:2000,详细信息:已达到开始阶段(加载包)}
a_desired=“testphase”:{“comand”:{“inputcheck:”,“num”:“2000”,“详细信息”:“已达到开始阶段,初始”}
b:desired=“testphase”:{“comand”:{“inputcheck”:“num”:“2000”,“details”:“已达到开始阶段(加载包)”}
我无法正确地将内容分组到“details”之后,以便按需要将“”设置为结尾。感谢您的帮助:)