从 R 中的推特状态中提取用户。非平凡的情况,如 RT@user @user:

Extracting users from twitter status in R. Non-trivial cases like RT@user @user:

我想从推文中提取用户名,这些用户名可能是:

例如,从这个:

"RT@user1: This is a retweet that mentions @user2."

我想要一个像这样的向量

[1] @user1 @user2

(带或不带“@”)

这是我当前的脚本:

    text <- "RT@user1: This is a retweet that mentions @user2."
    tokens <- unlist(strsplit(text, " "))
    mentions.mask <- grepl("@\w+", tokens)
    mentions <- tokens[mentions.mask]
    cat(mentions)
    [1] "RT@user1:" "@user2."

我怎样才能正确地做到这一点?

如果我理解得很好,这似乎很简单,您的正则表达式只是缺少捕获组。您可以使用此正则表达式:

(@\w+)
^----^--- Note capturing groups

Working demo

在 R 中你可以使用:

library(stringr)
str_extract("RT@user1: This is a retweet that mentions @user2.", "@\w+")

为此您可以简单地坚持使用基数 R。

text <- "RT@user1: This is a retweet that mentions @user2."
regmatches(text, gregexpr('@\w+', text))[[1]]
# [1] "@user1" "@user2"

没有前面的@:

regmatches(text, gregexpr('@\K\w+', text, perl=T))[[1]]
# [1] "user1" "user2"