在as string中,如何删除已知'start'和'end'的一部分?
In as string, how to remove one part which known 'start' and 'end'?
下面的dataframe中有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)$"))
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)
将它保存为一个组,这不是必需的(而且看起来有点混乱)。真正的罪魁祸首是你包含了 ^
,这意味着字符串的开头(如你所提到的),只有当所有字符串都以 V
开头并且在 "Vsomethingb"
中时才会匹配。当前vec
个字符串以"w"
、"1"
开头,"t"
、none个以V
、
开头
如果您需要正则表达式指南, 是许多组件的很好指南(以及关于它们的 questions/answers 的链接)。
你可以用这个模式来做:
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")
你们真的很亲密。
使用@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
下面的dataframe中有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)$"))
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)
将它保存为一个组,这不是必需的(而且看起来有点混乱)。真正的罪魁祸首是你包含了 ^
,这意味着字符串的开头(如你所提到的),只有当所有字符串都以 V
开头并且在 "Vsomethingb"
中时才会匹配。当前vec
个字符串以"w"
、"1"
开头,"t"
、none个以V
、
如果您需要正则表达式指南, 是许多组件的很好指南(以及关于它们的 questions/answers 的链接)。
你可以用这个模式来做:
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")
你们真的很亲密。
使用@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