我需要获取文件夹名称,如下所示:
etc/my/folder/john/is/good
我想要“约翰”。
文件夹并且始终是静态的(相同)。在这个例子中,“john”可以是“jack”或其他名称。
由于
答案 0 :(得分:1)
一种选择,使用positive lookaheads and lookbehinds查找一个或多个字母数字字符([a-zA-Z_0-9]
):
mystr = 'etc/my/folder/john/is/good';
exp1 = '(?<=folder\/)(\w+)(?=\/is)';
test = regexp(mystr, exp1, 'match', 'once')
返回:
test =
'john'
根据您的表现需求,您也可以只使用前瞻,只使用外观,或两者都不使用。理论上,正则表达式执行的步骤越多,它就越慢。在这种情况下,您很可能不会注意到,但这是一个潜在的考虑因素。
例如:
exp2 = 'folder\/(\w+)\/is';
test2 = regexp(mystr, exp2, 'tokens', 'once');
test2 = test2{:}
返回与上面相同的内容。请注意,'tokens'
outkey将返回一个单元格数组,我们可以根据需要获取字符数组。
我强烈建议您使用Regex101等网站作为游乐场来试验正则表达式并实时查看结果。
答案 1 :(得分:0)
您也可以使用regexp
代替strfind
。 strfind
可能更快,但在动态解决方案方面的能力较弱。你将使用你正在寻找的字符串在第3和第4个'/'之间的知识。
folder='etc/my/folder/john/is/good';
positions=strfind(folder,'/'); % get positions of the slashes
name=folder(positions(3)+1:positions(4)-1) % output the string between the 3rd and 4th slash
答案 2 :(得分:0)
使用新的replace
函数(MATLAB2016b和更新版本),这是微不足道的:
a='etc/my/folder/john/is/good';
b=replace(a, {'etc/my/folder/','/is/good'},'');