如何获得以大写字母开头的所有单词?

时间:2017-09-15 13:00:29

标签: r

假设:

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中有更简单的方法吗?

4 个答案:

答案 0 :(得分:4)

我们可以使用str_extract匹配大写字母([A-Z]),后跟单词边界(\\b),后跟一个或多个单词字符

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

gregexpr/regmatches

中的base R
regmatches(text, gregexpr("\\b[A-Z]\\w+", text))
#[1] "Honda" "Asus" 

答案 1 :(得分:4)

在基地R,你可以做

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

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

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

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

答案 2 :(得分:3)

这是一个没有正则表达式的解决方案:

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

答案 3 :(得分:0)

我会这样做:

const str = "fsfs blabla Honda t Asus";
const regex = /([A-Z]\w+)/g;
const result = [];
let m;
while ((m = regex.exec(str)) !== null) result.push(m[1]);
$('#result').html(JSON.stringify(result));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p id="result"></p>