提取字符串和一些数字

时间:2018-02-20 21:40:13

标签: r dplyr stringr

我想在字符串中提取以1.开头的模式。经过一些研究,我发现了stringr包和str_extract函数。但到目前为止它正在提取唯一的第一场比赛。

 library(stringr)
 library(dplyr)

 clas <- c("1461CD_1.332C","1461CD_1.5C_242","1461CD_1.6CC_131")
      df <- data.frame(clas)

      df %>% mutate(clas = str_extract(clas, "1.{1,2}"))


clas
1  146
2  146
3  146

预期产出

clas
1  1.33
2  1.5
3  1.6

我很感激您也写下了一些解释,因为正则表达式目前对我来说很复杂:)

1 个答案:

答案 0 :(得分:3)

要获得正确的正则表达式,您目前希望匹配1,文字.,然后是两位数。在正则表达式中,.表示任何字符,因此您需要使用\对其进行转义。但是,因为\是R中字符串中的特殊字符,这意味着您还需要转义\,因此您键入\\.。然后,您想要匹配一个或两个数字。使用量词{1,2}来指定一个或两个是正确的,但您需要告诉表达式您需要具体的数字。您可以使用[:digit:]或速记\\d执行此操作。这给出了所需的输出:

library(tidyverse)
clas <- c("1461CD_1.332C","1461CD_1.5C_242","1461CD_1.6CC_131")
df <- data.frame(clas)

df %>%
  mutate(clas = str_extract(clas, "1\\.\\d{1,2}"))
#>   clas
#> 1 1.33
#> 2  1.5
#> 3  1.6

reprex package(v0.2.0)创建于2018-02-20。

有关R中正则表达式和正则表达式的更多信息,请参阅chapter in R for Data Science,并查看来自RStudio的stringr的方便cheatsheet