которые имеют описание ОКВЭДа вида 71.12.7 Кадастровая деятельность. Пытаюсь с помощью stringr отделить все цифры от слов. Причем у меня может быть как ##.##.#, так и ##.# или ##.##. Как правильно тогда паттерн стоит написать?
Исходный пример кода: D <- str_split_fixed(Source_2$OKVED, "[:digit:].[:digit:].[:digit:] ", 2)
readr::parse_number() не подойдет?
Сейчас попробую...
Я бы разбил по точке при помощи separate
Вы бы скинули пример строки, где слова и цифры вместе
71.12.7 Кадастровая деятельность.
Я бы регулярной сделал. В pcre синтаксисе это выглядит так \d{1,2}\.\d{1,2}(\.\d)? [а-яА-Я ]+\.
Попробуйте что-то вроде этого: tibble(str = c("71.12.7 Кадастровая деятельность.", "71.12 Кадастровая деятельность.", "71 Кадастровая деятельность.")) %>% mutate(okved = str_extract(str, "^\\d{1,2}\\.\\d{1,2}\\.\\d{1,2}|^\\d{1,2}\\.\\d{1,2}|^\\d{1,2}"), name = str_extract(str, "(?<=\\d)\\s.+") %>% str_trim())
мне кажется самым удобным вытащить все до пробела регуляркой, потом сделать tidyr::separate() по точке
Так мой вариант и вытащил все что до пробела и все что после... далее разбить оквэд на уровни, если нужно с помощью separate()
просто меня пугает вот эта регулярка: "^\\d{1,2}\\.\\d{1,2}\\.\\d{1,2}|^\\d{1,2}\\.\\d{1,2}|^\\d{1,2}», мне кажется можно просто что-то в духе «(?.*)\\s»
я просто показал два подхода, можно заменить это выражение на ".+(?=\\s)"
нет такое не работает, заменил на ".{1,8}(?=\\s)" - и норм
Не сработало нормально, обрезало :(
Почти сработало. Спасибо!
_fixed не для регулярок. В доках описано что для чего применять, почитай.
> sub("^([0-9.]+).*", "\\1", "71.12.7 Кадастровая деятельность") [1] "71.12.7"
по первому пробелу же надо делить через обычный word
это привычный вариант
Обсуждают сегодня