提取直到字符串中的最后一个字符

Extracting until the last character in a string

考虑以下数据:

str <- c("OTB_MCD_100-119_0_0", "PS_SPF_16-31_0_0", "PP_DR/>16-77")

如何把它变成这样的字符串?

str
[1] "OTB_MCD" "PS_SPF" "PP_DR"

我试过substr,但是当字符长度不同时,它不起作用。

我们可以使用 sub 来匹配零个或多个 _ 后跟 0 个或多个非字母字符 ([^A-Za-z]*) 直到结尾 ($)的字符串,将其替换为空白 ("")

sub("_*[^A-Za-z]*$", "", str)
#[1] "OTB_MCD" "PS_SPF"  "PP_DR"