我有很长的字符串列表(大约900万),如下所示:
[1] ""
[2] "Hij is op 22 oktober 2001 getrouwd"
[3] ""
[4] " Biografie test"
我需要选择每个字符串超过n个字。我一直在努力:
string <- c("", "Hij is op 22 oktober 2001 getrouwd", "", " Biografie ")
grepl("\\w{3,}", string, perl = T)
# [1] FALSE TRUE FALSE TRUE
在我看来,\\w{3,}
应该找到n =三个或更多单词的所有内容,但由于某种原因,它也只与两个单词匹配。我还尝试了(\\s\\w\\s){3,}
,(\\w\\s){3,}
,(\\b\\.+\\b){3,}
和(\\w+\\b){3,}
等内容。但没有任何理想的结果。
应该很简单,但无法弄清楚。任何人吗?
答案 0 :(得分:3)
您可以使用包stri_count
中的stringi
来计算字词:
library(stringi)
string <- c("", "Hij is op 22 oktober 2001 getrouwd", "", " Biografie ")
stri_count(string,regex="\\S+")
[1] 0 7 0 1
要获得超过3个单词的字符串:
cnt <- stri_count(string,regex="\\S+")
string[cnt>=3]
[1] "Hij is op 22 oktober 2001 getrouwd"
答案 1 :(得分:1)
以下是base R
选项gregexpr
lengths(gregexpr("\\w+", string)) * nzchar(string)
#[1] 0 7 0 1
string <- c("", "Hij is op 22 oktober 2001 getrouwd", "", " Biografie ")
答案 2 :(得分:0)
这是一个适合您需求的简单grep:
string <- c("", "Hij is op 22 oktober 2001 getrouwd", "", " Biografie ")
grepl("(\\w+\\s){3,}", string)
#[1] FALSE TRUE FALSE FALSE
或......
sapply(strsplit(string, "\\s"), length)>=3
#[1] FALSE TRUE FALSE FALSE