使用R语言gsub与正则匹配删除路径含path的文件夹层级咨询
解答
1. 更优的正则写法
你原有写法依赖path前后固定字符长度,适用场景有限,若其他层级出现符合.{4}path.{2}的字符片段会产生误删。结合你给出的「目标文件夹必含path、夹在斜杠间总长度固定10位」的前提,更稳妥的写法如下:
# 严格匹配斜杠间长度为10、含path的文件夹名,替换后自动合并斜杠 gsub("/(?=[^/]{10})[^/]*path[^/]*/", "/", x, perl = TRUE)
该写法用正向预查锁定目标层级的长度,同时锚定了斜杠作为文件夹边界,不会误匹配其他层级的内容。
2. 匹配path前后第一个斜杠间所有内容的实现
无需依赖固定长度规则,不管带path的文件夹名有多长,都可以用以下写法准确删除对应层级:
gsub("/[^/]*path[^/]*/", "/", x)
正则逻辑说明:
- 首尾的
/锚定目标文件夹前后的路径分隔符 [^/]*匹配所有非斜杠的字符,也就是目标文件夹名的组成部分- 替换为单个
/,避免删除层级后出现连续斜杠的异常路径
执行上述代码后的输出结果符合预期:
[1] "d:/KeepItSimple/WAVs/filename.wav" [2] "d:/TryToKeepItSimple/WAVs/filename2.wav"
内容的提问来源于stack exchange,提问作者TBP
相关产品推荐
相关产品推荐

