我想从推文中提取标签(推特句柄)。
tweet <- "@me bla bla bla bla @2_him some text @me_"
由于某些标签中的标点符号,以下内容仅提取部分子字符串
regmatches(tweet, gregexpr("@[[:alnum:]]*", tweet))[[1]]
[1] "@me" "@2" "@me"
我不知道正则表达式会返回整个字符串(@tag)。
谢谢!
答案 0 :(得分:2)
如果要匹配所有非空格,只需使用相应的正则表达式
regmatches(tweet, gregexpr("@[^ ]*", tweet))[[1]]
# [1] "@me" "@2_him" "@me_"
答案 1 :(得分:2)
您可以使用以下内容。 \S
将匹配任何非空白字符。同样,您希望使用+
量词而不是*
,否则如果字符串中存在@
字符,您将最终匹配> regmatches(tweet, gregexpr("@\\S+", tweet))[[1]]
# [1] "@me" "@2_him" "@me_"
字符。
{{1}}
答案 2 :(得分:1)
而不是[[:alnum:]]*
使用\w*
,因为_
不在字母数字字符列表中(即[[:alnum:]]
匹配字母数字[A-Za-z0-9]
字符。)但它来了在单词字符([A-Za-z0-9_]
)列表下。
> regmatches(tweet, gregexpr("@\\w*", tweet))[[1]]
[1] "@me" "@2_him" "@me_"
答案 3 :(得分:1)
qdapRegex
包具有专门为此任务设计的功能rm_tag
:
library(qdapRegex)
rm_tag(tweet, extract=TRUE)
## [[1]]
## [1] "@me" "@2_him" "@me_"