2017-09-15 83 views
0

考虑:如何获取以大写字母开头的所有单词?

text <- "fsfs blabla Honda t Asus"

我希望得到的结果:

[1] "Honda" "Asus"

我已经通过这个函数来完成它:

foo <- function(txt){ 
    txtNew <- txt 
    txtNew2 <- txt 
    txtMemory <- "" 
    while(txtNew != txtMemory){ 
    txtNew <- txtNew2 
    txtMemory <- txtNew2 
    txtNew <- gsub("\\s[a-z]","",txtNew) 
    txtNew2 <- paste0(" ", txtNew) 
    } 
    txtNew <- sub("^\\s+", "", txtNew) 
    strsplit(txtNew, " ") 
} 
foo("fsfs blabla Honda t Asus") 

,但我想有更容易在R?

回答

3

我们可以使用str_extract匹配后面紧跟着一个或多个单词字符

library(stringr) 
str_extract_all(text, "\\b[A-Z]\\w+")[[1]] 
#[1] "Honda" "Asus" 

或者与gregexpr/regmatchesbase R

regmatches(text, gregexpr("\\b[A-Z]\\w+", text)) 
#[1] "Honda" "Asus" 
一个字边界( \\b)大写字母( [A-Z]
4

在基地R,你可以做

grep("^[A-Z]", scan(textConnection("fsfs blabla Honda t Asus"), ""), value=TRUE) 
Read 5 items 
[1] "Honda" "Asus" 

在这里,scan在文本中读入并用空格分开。然后grep值= TRUE返回字符向量中与可以读取的子表达式“^ [A-Z]”匹配的所有元素“以大写字母开头”。

代替scan,您可以使用strsplit/unlist获得相同的结果。

grep("^[A-Z]", unlist(strsplit("fsfs blabla Honda t Asus", " ")), value=TRUE) 
3

这里有没有正则表达式的解决方案:

text <- "fsfs blabla Honda t Asus" 
x <- strsplit(text, " ", T)[[1]] 
x[substr(x, 1, 1) %in% LETTERS] 
# [1] "Honda" "Asus" 
相关问题