2017-09-15 210 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" 
相關問題