使用 stringr 提取字符串中包含特定字符集的整个单词
Use stringr to extract the whole word in a string with a particular set of characters in it
我有一系列具有特定字符集的字符串。我想要做的是能够仅从包含这些字符的字符串中提取单词,并丢弃其余部分。
我已经尝试了各种正则表达式来做到这一点,但我要么让它拆分所有单词,要么 returns 整个字符串。以下是字符串种类的示例。我一直在尝试使用 stringr::str_extract_all()
,因为在某些情况下需要删除多个单词。
data <- c("AlvariA?o, 1961","Andrade-Salas, Pineda-Lopez & Garcia-MagaA?a, 1994", "A?vila & Cordeiro, 2015", "BabiA?, 1922")
result <- unlist(stringr::str_extract_all(data, "regex"))
从这里我想要一个结果来提取所有带有“A?”的单词,如下所示:
result <- c("AlvariA?o", "MagaA?a", "A?vila", "BabiA"?)
看起来很简单,但我的正则表达式知识目前还不够用。
要匹配?
需要用\?
转义,所以A\?
会匹配A?
。 \w
匹配任何单词字符(相当于 [a-zA-Z0-9_])并且 *
匹配前一个标记在零到无限次之间,尽可能多次,根据需要回馈(贪婪).
unlist(stringr::str_extract_all(data, "\w*A\?\w*"))
#[1] "AlvariA?o" "MagaA?a" "A?vila" "BabiA?"
我做了一个函数,但比 Gki 的差很多...
library(quanteda)
set_of_character <- function(dummy, key){
n <- nchar(key)
dummy %>% str_split(., " ") %>%
unlist %>%
str_replace(., ",", "") %>%
sapply(., function(x) {
x %>%
tokens("character") %>%
unlist() %>%
char_ngrams(n, concatenator = "")
}) %>%
sapply(., function(x) (key %in% x)) %>% which(TRUE) %>% names %>%
return
}
对于你的例子,
set_of_character(data, "A?")
[1] "AlvariA?o" "Garcia-MagaA?a" "A?vila" "BabiA?"
我有一系列具有特定字符集的字符串。我想要做的是能够仅从包含这些字符的字符串中提取单词,并丢弃其余部分。
我已经尝试了各种正则表达式来做到这一点,但我要么让它拆分所有单词,要么 returns 整个字符串。以下是字符串种类的示例。我一直在尝试使用 stringr::str_extract_all()
,因为在某些情况下需要删除多个单词。
data <- c("AlvariA?o, 1961","Andrade-Salas, Pineda-Lopez & Garcia-MagaA?a, 1994", "A?vila & Cordeiro, 2015", "BabiA?, 1922")
result <- unlist(stringr::str_extract_all(data, "regex"))
从这里我想要一个结果来提取所有带有“A?”的单词,如下所示:
result <- c("AlvariA?o", "MagaA?a", "A?vila", "BabiA"?)
看起来很简单,但我的正则表达式知识目前还不够用。
要匹配?
需要用\?
转义,所以A\?
会匹配A?
。 \w
匹配任何单词字符(相当于 [a-zA-Z0-9_])并且 *
匹配前一个标记在零到无限次之间,尽可能多次,根据需要回馈(贪婪).
unlist(stringr::str_extract_all(data, "\w*A\?\w*"))
#[1] "AlvariA?o" "MagaA?a" "A?vila" "BabiA?"
我做了一个函数,但比 Gki 的差很多...
library(quanteda)
set_of_character <- function(dummy, key){
n <- nchar(key)
dummy %>% str_split(., " ") %>%
unlist %>%
str_replace(., ",", "") %>%
sapply(., function(x) {
x %>%
tokens("character") %>%
unlist() %>%
char_ngrams(n, concatenator = "")
}) %>%
sapply(., function(x) (key %in% x)) %>% which(TRUE) %>% names %>%
return
}
对于你的例子,
set_of_character(data, "A?")
[1] "AlvariA?o" "Garcia-MagaA?a" "A?vila" "BabiA?"