假设:
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中有更简单的方法吗?
答案 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>