R正则表达式-提取以@符号开头的单词

Ben*_*Ben 6 regex r stringr

我正在尝试使用R的stringr包从推文中提取Twitter句柄。例如,假设我要获取向量中所有以“ A”开头的单词。我可以这样

library(stringr)

# Get all words that begin with "A"
str_extract_all(c("hAi", "hi Ahello Ame"), "(?<=\\b)A[^\\s]+")

[[1]]
character(0)

[[2]]
[1] "Ahello" "Ame"   
Run Code Online (Sandbox Code Playgroud)

大。现在,让我们使用“ @”而不是“ A”尝试相同的操作

str_extract_all(c("h@i", "hi @hello @me"), "(?<=\\b)\\@[^\\s]+")

[[1]]
[1] "@i"

[[2]]
character(0)
Run Code Online (Sandbox Code Playgroud)

为什么此示例给出的结果与我预期的相反,我该如何解决?

MrF*_*ick 5

看起来您可能是说

str_extract_all(c("h@i", "hi @hello @me", "@twitter"), "(?<=^|\\s)@[^\\s]+")
# [[1]]
# character(0)
# [[2]]
# [1] "@hello" "@me" 
# [[3]]
# [1] "@twitter"
Run Code Online (Sandbox Code Playgroud)

\b正则表达式中的in是边界,它出现在“字符串中的两个字符之间,其中一个是单词字符,另一个不是单词字符”。看这里。由于空格和“ @”都是非单词字符,因此“ @”之前没有边界。

使用此修订版,您可以匹配字符串的开头或空格后的值。