我收集了推文,我想从每条推文中提取表情符号unicode。这个符号是<U+00001F44D>格式的,我使用了R上的gsub函数来删除表情符号之前和之后的所有文本。
tweets$text <- gsub(".*(<.*>).*", "\\1", tweets$text)然而,由于每个推特上可能有几个表情符号,所以我决定在字符">“之后分割每一列。
在某些列中,有些字符串只是字母表字符,而不是以"<“开头。
我的问题是:如果字符串没有以"<“开头,如何删除它?
示例:
data$text <- c("<U+000>", "character", "abc <U+000>")
data$text <- gsub(".*(<.*>).*", "\\1", data$text)数据仍将包括“字符”字符串,但我正在尝试删除除表情符号unicode以外的所有字符。
发布于 2019-07-27 15:27:20
我们可以用grep代替gsub
grep("^\\<", v1, invert = TRUE, value = TRUE)
#[1] "<U+000>"如果我们需要提取表情符号并删除剩下的字符,我们可以从str_extract中使用stringr。指定要匹配的正则表达式,即<是元字符,因此我们可以转义它(\\<),后面跟着一个或多个不是>的字符(方括号内将计算字面字符-- ^ -指的不是该字符),然后是> (再次转义\\)。
library(stringr)
str_extract(v1, "\\<[^>]+\\>")
#[1] "<U+000>" NA "<U+000>"如果我们需要创建多个列,如果有多个元素
lst1 <- str_extract_all(dat$v2, "\\<[^>]+\\>")
n <- lengths(lst1)
lapply(lst1, `length<-`,max(n))
dat[paste0("Col", seq_len(max(n)))] <- do.call(rbind,
lapply(lst1, `length<-`,max(n)))
dat
# v2 Col1 Col2
#1 <U+000> <U+000> <NA>
#2 character <NA> <NA>
#3 abc <U+000> <U+000> <NA>
#4 <U+000> characters <U+000> <U+000> <U+000>或者使用base R
regmatches(v1, regexpr("\\<[^>]+\\>", v1, perl = TRUE))
#[1] "<U+000>" "<U+000>"数据
v1 <- c("<U+000>", "character", "abc <U+000>")
v2 <- c(v1, "<U+000> characters <U+000>")
dat <- data.frame(v2 = v2, stringsAsFactors = FALSE)https://stackoverflow.com/questions/57233439
复制相似问题