正则匹配求助:提取.xlsx文件名前的目标片段(R语言示例)
解决方法
方法1:精准正则匹配
直接匹配最后一段斜杠后、.xlsx前的内容,用[^/]+匹配不含斜杠的字符序列,确保只取目标文件名部分:
library(stringr) test <- c("truc/truc/plouf.xlsx","plouf.xlsx","truc/plouf.xlsx") str_extract(test, "[^/]+(?=\\.xlsx)")
输出结果:
[1] "plouf" "plouf" "plouf"
为什么你的原正则失效?
原正则(?<=\\/{0,1}).+(?=\\.xlsx)的问题在于:
(?<=\\/{0,1})允许匹配字符串开头或单个斜杠后的位置,导致.+(无论贪婪/惰性)会从最左端开始匹配,把前面的路径truc/truc/或truc/也包含进去。- 惰性匹配
.+?在这里没用,因为整个字符串只有一个.xlsx,无论贪婪还是惰性都会匹配到该后缀前的所有内容。
方法2:用R文件处理工具(更简洁)
如果是处理文件路径,推荐用R内置的文件操作函数,无需手写正则:
# 先提取文件名,再去掉后缀 tools::file_path_sans_ext(basename(test))
同样能得到"plouf"的结果,代码可读性更强。
内容的提问来源于stack exchange,提问作者denis
相关产品推荐
相关产品推荐

