除了句点和短划线之外的R str_replace_all

时间:2017-02-01 16:14:31

标签: r regex str-replace

我正在尝试替换所有标点符号,而不是单词"除了"。"和" - "在一个字符串中,但我正在努力找到正确的组合来设置正则表达式。

我在R中使用了以下str_replace_all()代码,但现在我想指定忽略"。"和" - "。我已尝试将其设置为包含[^ .-]和([.-])等内容,但我没有得到所需的输出。

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

任何建议都将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:8)

使用^可能更容易,这意味着它匹配括号内未引用的所有内容。通过在框中包含所有字母,数字,。和 - ,您不会替换它们。

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

答案 1 :(得分: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.-]模式匹配除(因为[^...]是否定字符类)以外的任何字符)字符字母(字母,数字,_),.和{{ 1}}。