从特定字符开始提取子字符串直到下一个空格

时间:2014-09-24 06:51:52

标签: regex r

我想从推文中提取标签(推特句柄)。

tweet <- "@me bla bla bla bla @2_him some text @me_"

由于某些标签中的标点符号,以下内容仅提取部分子字符串

regmatches(tweet, gregexpr("@[[:alnum:]]*", tweet))[[1]]
[1] "@me" "@2"  "@me"

我不知道正则表达式会返回整个字符串(@tag)。

谢谢!

4 个答案:

答案 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_"