我有一个看起来像这样的名字列表:
c("xxxxxx xx", "xxx yyy xxxxx", "xxx yy xxxxxx",
"xxxxxxx yyyyyyy xxxxx", "xxxx xxxx", "xxx yyyyyy xxx",
"xxxxx yyyyy xxxxxxxx", "xxx yyyyyyyy xxxx", "xx xxx",
"xxxxx yyyyy xxxxx", "xxxx yy xxxxxx", "xxxxx yyyy xxx",
"xxxxxxx yy xxxxx", "xxxxx yyyyyyy xxxxx", "xxxx yyyy xxxxxx",
"xxxxx yyyy xxxxx", "xxxxxxxx xxxxx", "xxxxxx yyyyyyyy xxxxx",
"xxxxxx yy xxxxx", "xxx yyyy xxxxxx")
我需要提取(索引)所有带有4-6个字母的单词的名称。
我知道我可以split
每个字符串,用nchar
计算它们的字符数,然后索引长度在2到4之间的字符。但是,有什么方法可以做到这一点使用正则表达式的单行吗?
预期输出必须是向量: 数字
[1] 1 2 3 5 6 8 9 11 12 13 15 16 20
或逻辑
[1] TRUE TRUE TRUE FALSE TRUE TRUE FALSE TRUE TRUE FALSE
[11] TRUE TRUE TRUE FALSE TRUE TRUE FALSE FALSE FALSE TRUE
答案 0 :(得分:1)
基本R
您可以使用grepl
grepl("\\b\\w{4,6}\\b", my.text)
# [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE
Stringr
您可以将stringr
的{{1}}与
str_detect
在两个版本中,关键点都是匹配长度为4到6的单词的正则表达式。library(stringr)
str_detect(my.text, "\\b\\w{4,6}\\b")
# [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE
表示单词边界。 \\b
匹配任何单词字符; \\w
。如果只想匹配字母,则可以使用[A-z0-9_]
或[A-z]
代替[[:alpha:]]
。
数据
\\w