在字符串中,如何删除已知“开始”和“结束”的部分?

and*_*ang 2 regex r stringr

下面的数据框中有sku名称,我想删除以“V”开头并以“b”结尾的部分,我的代码 str_remove_all(sku_name,"^(V).*?(\\b)$")无法工作。

有人可以帮忙吗?

mydata <- data.frame(sku_name=c('wk0001 V1b','123780 PRO V326b','ttttt V321b'))
mydata %>% mutate(sku_name_new=str_remove_all(sku_name,"^(V).*?(\\b)$"))
Run Code Online (Sandbox Code Playgroud)

r2e*_*ans 5

vec <- c('wk0001 V1b','123780 PRO V326b','ttttt V321b')
sub("V.*b$", "", vec)
# [1] "wk0001 "     "123780 PRO " "ttttt "     
stringr::str_remove(vec, "V.*b$")
# [1] "wk0001 "     "123780 PRO " "ttttt "     
Run Code Online (Sandbox Code Playgroud)

这也适用于非贪婪的"V.*?b$",如果有必要的话就交给你了。

BTW:\\b是单词边界,而不是文字b(V)将其保存为一个组,这是没有必要的(并且看起来有点令人困惑)。真正的罪魁祸首是你包含了^,这意味着字符串的开头(正如你所提到的),只有当所有字符串都以V, 开头时才会匹配"Vsomethingb"。当前vec字符串以"w""1"、 和开头"t",没有一个以 开头V

如果您需要正则表达式指南,/sf/answers/1606085281/是许多组件的良好指南(以及有关它们的问题/答案的链接)。