matlab regexprep

时间:2012-11-01 12:03:49

标签: matlab

如何使用matlab regexprep进行多重表达和替换?

file='http:xxx/sys/tags/Rel/total';

我想用sys1替换'sys',用'total1'替换'total'。对于单个表达式,替换它的工作方式如下:

strrep(file,'sys', 'sys1')

并希望有喜欢

strrep(file,'sys','sys1','total','total1') . 

我知道这对strrep

无效

3 个答案:

答案 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.

这两个结果都是无意识的,并且似乎无法通过连续替换而不是同步替换。