R中的选择性替换字符串

堆栈用户

我有一个字符串向量。向量中的大多数元素由一个或多个字母后跟一个或多个数字组成。我希望在每个字符串中仅用“ Sep”替换“ September”(及其缩写)单词,但保留数字。这是我使用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"

有人可以帮我吗。谢谢

K

base中,您可以使用sub模式[Ss]ep[[:alpha:]]*查找9月及其缩写并将其替换为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"  

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章