下面的資料框中有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)$"))
uj5u.com熱心網友回復:
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 "
如果有必要,這也適用于非貪婪的"V.*?b$",交給你。
順便說一句:\\b是一個單詞邊界,而不是文字b。(V)將其保存為一個組,這沒有必要(看起來有點混亂)。真正的罪魁禍首是您包含,這意味著字串的開頭(如您所提到的),僅當所有字串以, 和 in^開頭時才會匹配。當前字串以 , 和 開頭,并且沒有一個以 開頭。V"Vsomethingb"vec"w""1""t"V
如果您需要正則運算式指南,https://stackoverflow.com/a/22944075/3358272是許多組件的良好指南(以及有關它們的問題/答案的鏈接)。
uj5u.com熱心網友回復:
你可以用這個模式做到這一點:
vector <- c('wk0001 V1b','123780 PRO V326b','ttttt V321b')
# if only numbers can be between the "V" and "b".
stringr::str_remove(vector , "V\\d b")
# if any character can be between the "V" and "b", but at least one and no "V" or "b".
stringr::str_remove(vector , "V[^Vb] b")
uj5u.com熱心網友回復:
你真的很親近。
使用@2evans 提到的一種替代方法修復正則運算式,就完成了!
dplyr我使用管道共享代碼,因為它可以更好地為您服務。
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$"))
sku_name sku_name_new
1 wk0001 V1b wk0001
2 123780 PRO V326b 123780 PRO
3 ttttt V321b ttttt
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/418908.html
標籤:
