如何使用matlab regexprep进行多重表达和替换?
file='http:xxx/sys/tags/Rel/total';
我想用sys1替换'sys',用'total1'替换'total'。对于单个表达式,替换它的工作方式如下:
strrep(file,'sys', 'sys1')
并希望有喜欢
strrep(file,'sys','sys1','total','total1') .
我知道这对strrep
答案 0 :(得分:0)
为什么不直接发出命令两次?
file = 'http:xxx/sys/tags/Rel/total';
file = strrep(file,'sys','sys1')
strrep(file,'total','total1')
答案 1 :(得分:0)
要解决这个问题,你需要使用正则表达式替换功能,尝试在matlab中找到类似于php的正则表达式:
$string = 'http:xxx/sys/tags/Rel/total';
preg_replace('/http:(.*?)\//', 'http:${1}1/', $string);
${1}
表示第一个匹配组,即括号(.*?)
中的内容。
http:(.*?)\/
- 匹配模式
http:${1}1/
- 根据您的意愿添加第二个模式(第一个是组号)
http:xxx/sys/tags/Rel/total
- 输入字符串
秘诀是,(.*?)
匹配的任何内容(无论是 xxx 或 yyyy 或 1234 )都会被插入而不是${1}
替换模式,然后将旧东西替换为输入字符串。欢迎在php中查看substitute functionality的更多示例。
答案 2 :(得分:0)
如regexprep
的帮助页面所述,您可以指定模式和替换对,如下所示:
file='http:xxx/sys/tags/Rel/total';
regexprep(file, {'sys' 'total'}, {'sys1' 'total1'})
ans =
http:xxx/sys1/tags/Rel/total1
如果您能够为要替换的所有内容定义匹配模式,甚至可以使用令牌:
regexprep(file, '/([st][yo][^/$]*)', '/$11')
ans =
http:xxx/sys1/tags/Rel/total1
但是,在某些情况下必须注意第一种方法,因为MATLAB会一个接一个地替换这些对。也就是说,例如,如果第一个模式匹配一个字符串并将其替换为随后由后一个模式匹配的东西,那么它也将被后一个替换替换,即使它可能没有匹配后面的模式原始字符串。
示例:
regexprep('This\is{not}LaTeX.', {'\\' '([{}])'}, {'\\textbackslash{}' '\\$1'})
ans =
This\textbackslash\{\}is\{not\}LaTeX.
=> This\{}is{not}LaTeX.
和
regexprep('This\is{not}LaTeX.', {'([{}])' '\\'}, {'\\$1' '\\textbackslash{}'})
ans =
This\textbackslash{}is\textbackslash{}{not\textbackslash{}}LaTeX.
=> This\is\not\LaTeX.
这两个结果都是无意识的,并且似乎无法通过连续替换而不是同步替换。