Извлечь строку и некоторое количество цифр

Я хочу извлечь шаблон, который начинается с 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

Я был бы признателен, если бы вы также записали некоторые пояснения к своему решению, поскольку регулярные выражения в настоящее время представляют для меня сложные темы :)


person Alexander    schedule 20.02.2018    source источник
comment
str_extract(clas, "1\\.[:digit:]{1,2}").....? Точки — это специальные символы, поэтому вам нужно их экранировать, а затем указать, что вам нужны только последующие 1-2 цифры.   -  person joran    schedule 21.02.2018
comment
Или вы можете просто сделать это с помощью sub(".*(1\\.\\d{1,2}).*", "\\1", clas)   -  person G5W    schedule 21.02.2018
comment
@joran аккуратно и чисто. Большое спасибо! Я понимаю свою ошибку!   -  person Alexander    schedule 21.02.2018


Ответы (1)


Чтобы получить правильное регулярное выражение, вы в настоящее время хотите сопоставить 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

Создано 20 февраля 2018 г. с помощью пакета reprex (v0.2.0).

Дополнительные сведения о регулярных выражениях и регулярных выражениях в R, в частности, см. в главе R for Data Science, а также посмотрите удобную шпаргалку для stringr от RStudio.

person Calum You    schedule 20.02.2018