2014-09-24 40 views
1

我想從推文中提取標籤(Twitter句柄)。提取從特定字符開始直到下一空間的子字符串

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

以下內容僅提取了一些子的部分原因是一些標籤

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

標點符號我不知道是什麼的正則表達式將返回整個字符串(@tag)。

謝謝!

回答

2

如果你想匹配所有的非空間,只需要用相應的正則表達式

regmatches(tweet, gregexpr("@[^ ]*", tweet))[[1]] 
# [1] "@me" "@2_him" "@me_" 
1

代替[[:alnum:]]*使用\w*因爲_下的字母數字字符列表(即,[[:alnum:]]匹配字母數字[A-Za-z0-9]字符不來。 ),但它包含在單詞字符([A-Za-z0-9_])列表中。

> regmatches(tweet, gregexpr("@\\w*", tweet))[[1]] 
[1] "@me" "@2_him" "@me_" 
2

您可以使用以下方法。 \S將匹配任何非空白字符。同樣,如果您希望使用+量詞而不是*,否則如果字符串中存在字符,您將最終單獨匹配@字符。

> regmatches(tweet, gregexpr("@\\S+", tweet))[[1]] 
# [1] "@me" "@2_him" "@me_" 
1

qdapRegex該包裝具有專門爲這個任務而設計rm_tag的函數:

library(qdapRegex) 
rm_tag(tweet, extract=TRUE) 

## [[1]] 
## [1] "@me" "@2_him" "@me_" 
相關問題