我想在字符串中删除长度小于3的单词。例如我的输入是
str<- c("hello RP have a nice day")
我希望我的输出
str<- c("hello have nice day")
请帮忙
答案 0 :(得分:5)
试试这个:
gsub('\\b\\w{1,2}\\b','',str)
[1] "hello have nice day"
修改强> \ b是单词边界。如果需要删除额外空间,请将其更改为:
gsub('\\b\\w{1,2}\\s','',str)
或者
gsub('(?<=\\s)(\\w{1,2}\\s)','',str,perl=T)
答案 1 :(得分:3)
或使用str_extract_all
提取长度为&gt; = 3且paste
library(stringr)
paste(str_extract_all(str, '\\w{3,}')[[1]], collapse=' ')
#[1] "hello have nice day"
答案 2 :(得分:2)
x <- "hello RP have a nice day"
z <- unlist(strsplit(x, split=" "))
paste(z[nchar(z)>=3], collapse=" ")
# [1] "hello have nice day"
答案 3 :(得分:1)
这是一种方法,使用我与@hwnd合作的 qdapRegex 包中的rm_nchar_words
函数(SO regex guru extraordinaire)。在这里,我展示删除1-2个字母单词,然后删除1-3个字母单词:
str<- c("hello RP have a nice day")
library(qdapTools)
rm_nchar_words(str, "1,2")
## [1] "hello have nice day"
rm_nchar_words(str, "1,3")
## [1] "hello have nice"
正如 qdapRegex 旨在教导的是S
函数将1,2
放入量词大括号中的正则背后的正则表达式:
S("@rm_nchar_words", "1,2")
## "(?<![\\w'])(?:'?\\w'?){1,2}(?![\\w'])"