0

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

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

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

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

并想拥有喜欢

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

我知道这不起作用strrep

4

3 回答 3

0

要解决它,您需要使用正则表达式替换功能,尝试在 matlab 的正则表达式中找到与 php 中类似的内容:

$string = 'http:xxx/sys/tags/Rel/total';
preg_replace('/http:(.*?)\//', 'http:${1}1/', $string);  

${1}表示第一个匹配组,即括号中的内容,(.*?)

http:(.*?)\/- 匹配模式

http:${1}1/ - 用您希望添加的第二个 1 替换模式(第一个 1 是组号)

http:xxx/sys/tags/Rel/total - 输入字符串

秘诀是任何匹配的东西(.*?)(无论是xxx还是yyyy还是1234)都将被插入而不是${1}替换模式,然后替换而不是旧的东西到输入字符串中。欢迎查看更多关于php中替代功能的示例。

于 2012-11-01T13:22:56.110 回答
0

为什么不直接发出命令两次?

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

file = strrep(file,'sys','sys1')
strrep(file,'total','total1')
于 2012-11-01T12:40:20.697 回答
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.

这两个结果都是意料之外的,而且似乎没有办法通过连续替换而不是同时替换来解决这个问题。

于 2014-02-24T16:42:38.113 回答