我希望您能够删除字符串中长度小于3的单词。例如,我的输入是:
我希望我的输出是什么。
str<- c("hello RP have a nice day")
我希望我的输出是什么。
str<- c("hello have nice day")
请帮忙
试试这个:
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)
或者使用str_extract_all
提取所有长度大于等于3的单词和paste
library(stringr)
paste(str_extract_all(str, '\\w{3,}')[[1]], collapse=' ')
#[1] "hello have nice day"
SubConsolData$ProductTitle <- paste(str_extract_all(SubConsolData$ProductTitle, '\\w{3,}')[[1]], collapse=' ')
。错误是DF(SubConsolData
)的第一行被重复到DF的所有其他行中。 - LeMarque[[1]]
。在这种情况下,只有一个字符串。在您的情况下,您可能需要循环然后执行paste
操作。 - akrun这里提供一种方法,使用我与@hwnd(SO正则表达式大师)共同编写的qdapRegex包中的rm_nchar_words
函数。这里展示了删除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'])"
x <- "hello RP have a nice day"
z <- unlist(strsplit(x, split=" "))
paste(z[nchar(z)>=3], collapse=" ")
# [1] "hello have nice day"
gsub(' . | .. ', ' ', s)
- rawr