R语言如何移除最后一个斜杠(含)之前的所有内容?
解决方法:提取最后一个斜杠后的内容
嘿,我来帮你调整代码,拿到你想要的结果!
你之前用的gsub('(.*)/\\w+', '\\1', x)其实是保留最后一个斜杠之前的内容——它把(.*)/(所有字符直到最后一个斜杠)加上后面的单词匹配到,然后替换成捕获组\\1(也就是斜杠前的部分),方向刚好反了。
方法1:修正正则表达式
我们可以反过来,把最后一个斜杠及之前的所有内容替换为空,只留下后面的部分:
x <- c('test/test/my', 'et/tom/cat', 'set/eat/is', 'sk / handsome') gsub('.*/', '', x)
运行后会得到你预期的结果:
[1] "my" "cat" "is" "handsome"
这里的正则.*/是贪婪匹配:.*会匹配任意字符(包括空格)直到最后一个/,然后把这整段内容替换为空,剩下的就是斜杠之后的部分了。
方法2:用R内置函数更简洁
其实R里有个专门处理这类路径/分隔符问题的函数basename(),完全不需要写正则,直接就能提取最后一个分隔符后的内容:
basename(x)
运行结果和上面的正则方法完全一致,而且代码更易读,适合处理这种类似路径的字符串。
内容的提问来源于stack exchange,提问作者angel0smile
相关产品推荐
相关产品推荐

