2017-09-15 10 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

私たちは、一つ以上の単語文字

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

それともbase R

regmatches(text, gregexpr("\\b[A-Z]\\w+", text)) 
#[1] "Honda" "Asus" 
から gregexpr/regmatchesと続くワード境界( \\b)に続く大文字( [A-Z])と一致する str_extractを使用することができます
4

ベースRで行うことができます

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

ここで、scanは、テキストを読み込み、空白で区切ります。次に、値= TRUEのgrepは、部分文字列 "^ [A-Z]"に一致する文字ベクトルのすべての要素を返します。 "^ [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" 
関連する問題