如何使用 matlab regexprep 进行多个表达式和替换?
file='http:xxx/sys/tags/Rel/total';
我想用 sys1 替换“sys”,用“total1”替换“total”。对于单个表达式的替换,它的工作方式如下:
strrep(file,'sys', 'sys1')
并想拥有喜欢
strrep(file,'sys','sys1','total','total1') .
我知道这不起作用strrep
如何使用 matlab regexprep 进行多个表达式和替换?
file='http:xxx/sys/tags/Rel/total';
我想用 sys1 替换“sys”,用“total1”替换“total”。对于单个表达式的替换,它的工作方式如下:
strrep(file,'sys', 'sys1')
并想拥有喜欢
strrep(file,'sys','sys1','total','total1') .
我知道这不起作用strrep
要解决它,您需要使用正则表达式替换功能,尝试在 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中替代功能的示例。
为什么不直接发出命令两次?
file = 'http:xxx/sys/tags/Rel/total';
file = strrep(file,'sys','sys1')
strrep(file,'total','total1')
如 的帮助页面中所述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.
这两个结果都是意料之外的,而且似乎没有办法通过连续替换而不是同时替换来解决这个问题。