提取字符串和一些数字

Extract string and some number of digits

我想提取字符串中以 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、文字 .,然后是两位数字。在正则表达式中,.表示任意字符,需要用\转义。但是,因为 \ 是 R 字符串中的一个特殊字符,这意味着您还需要对 \ 进行转义,因此您键入 \.。然后,您想要匹配一个或两个数字。用量词{1,2}来指定一个或两个是正确的,但是你需要明确地告诉表达式你想要数字。您可以使用 [:digit:] 或 shorthand \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 中正则表达式和正则表达式的更多信息,请参阅 RStudio 中 stringrchapter in R for Data Science and also look at the handy cheatsheet