2017-02-01 7 views
1

Я пытаюсь заменить все знаки препинания и «не слова», кроме «.». и "-" в строке, но я стараюсь найти правильную комбинацию для создания выражения регулярного выражения.R str_replace_all за исключением периодов и тире

Я использовал следующий код str_replace_all() в R, но теперь я хочу указать, чтобы игнорировать «.». а также "-". Я попытался настроить его, чтобы включить такие вещи, как [^ .-] и ([.-]), но я не получаю желаемый результат.

str_replace_all("[APPLE/O.ORANGE*PLUM-11]", regex("[\\W+,[:punct:]]", perl=T)," ") 

" APPLE O ORANGE PLUM 11 " #current output 

" APPLE O.ORANGE PLUM-11 " #desired output 

Любые предложения были бы весьма полезными. Благодаря!

+1

Ошибка: не удалось найти функцию "str_replace_all". Вы должны указать, какие пакеты вы используете при запросе о не-базовых R-функциях. –

ответ

8

Возможно, проще использовать символ ^, что означает, что он соответствует всему, что не указано в скобках. Включая все буквы, цифры, и - в поле, которое вы не замените.

library(stringr) 
str_replace_all("[APPLE/O.ORANGE*PLUM-11]", "[^a-zA-Z0-9.-]"," ") 
+0

Отлично, спасибо! – SC2

0

Обратите внимание, что str_replace_all не позволяет использовать шаблоны PCRE, то stringr library работает ICU регулярное выражение.

Что вам нужно сделать, может быть сделано с базой R gsub, используя следующую схему:

> x<-"[APPLE/O.ORANGE*PLUM-11]" 
> gsub("[^\\w.-]", " ", x, perl=TRUE) 
[1] " APPLE O.ORANGE PLUM-11 " 

См R demo online. Также см. regex online demo here.

[^\\w.-] шаблон соответствует любому символу, кроме (с [^...] является инвертированный класс символов) слово символ (буква, цифра, _), . и -.