我有一个 vector 字符串。 vector 中的大多数元素由一个或多个字母后跟一个或多个数字组成。我希望在每个字符串中仅将“September”(及其缩写)单词替换为“Sep”,但保留数字。
这是我使用Stringr包尝试过的
my.data <- c("01Sept2019", "05sep2019", "4September2019", "8sep2019",
"12oct2019", "4Jun2018", "17Mar2017", "09May2015", "13Sep19")
library(stringr)
my.data %>% str_replace_all("(?i)Sept?(ember)?[0-9]", "Sep")
#> [[1]]
#> [1] "01Sep019", "05Sep019", "4Sep019", "8Sep019", "13Sep9"
这是我想要获得的:
#> [1] "01Sep2019", "05Sep2019", "4Sep2019", "8Sep2019", "13Sep19"
有人可以帮我吗。谢谢
最佳答案
在base中,您可以将sub
与[Ss]ep[[:alpha:]]*
模式一起使用以查找September及其缩写,并将其替换为Sep
。
sub("[Ss]ep[[:alpha:]]*", "Sep", my.data)
#[1] "01Sep2019" "05Sep2019" "4Sep2019" "8Sep2019" "12oct2019" "4Jun2018"
#[7] "17Mar2017" "09May2015" "13Sep19"
要只匹配9月后跟数字的数字,可以使用:
sub("sep(t|(?=\\d))(e|(?=\\d))(m|(?=\\d))(b|(?=\\d))(e|(?=\\d))(r|(?=\\d))"
, "Sep", my.data, ignore.case=TRUE, perl=TRUE)
#[1] "01Sep2019" "05Sep2019" "4Sep2019" "8Sep2019" "12oct2019" "4Jun2018"
#[7] "17Mar2017" "09May2015" "13Sep19"