我正在尝试使用R中的regex从文本中提取Twitter主题标签,使用“stringr”包中的str_match_all
。
问题是有时候hashtag会被截断,并在文本字符串的末尾附加一个水平省略号字符,如下例所示:
str_match_all("hello #goodbye #au…","#[[:alnum:]_+]*[^…]")[[1]]
我可以使用上面的代码成功提取主题标签列表,但我希望排除被截断的主题标签(即具有水平省略号字符)。
这令人沮丧,因为我到处寻找解决方案,上面的代码是我能想到的最好的代码,但显然不起作用。
非常感谢任何帮助。
答案 0 :(得分:1)
我建议将regmatches
与regexpr
和#[^#]+(?!…)\\b
Perl风格的正则表达式一起使用:
x <- "#hashtag1 notHashtag #hashtag2 notHashtag #has…"
m <- gregexpr('#[^#\\s]+(?!…)\\b', x, perl=T)
// or m <- gregexpr('#\\w+(?!…)\\b', x, perl=T)
// or m <- gregexpr('#\\S+(?!…)\\b', x, perl=T)
regmatches(x, m)
正则表达式意味着:
#
- 文字#
[^#]+
- 除#
之外的1个或多个字符(或\\w+
仅匹配字母数字和下划线,或\\S+
匹配任意数量的非空白字符)(?!…)\\b
- 匹配前面没有…
上述代码执行的结果:[1] "#goodbye"