正则表达式不匹配模式,后跟字符串中的水平省略号

时间:2015-06-11 08:17:16

标签: regex r

我正在尝试使用R中的regex从文本中提取Twitter主题标签,使用“stringr”包中的str_match_all

问题是有时候hashtag会被截断,并在文本字符串的末尾附加一个水平省略号字符,如下例所示:

str_match_all("hello #goodbye #au…","#[[:alnum:]_+]*[^…]")[[1]]

我可以使用上面的代码成功提取主题标签列表,但我希望排除被截断的主题标签(即具有水平省略号字符)。

这令人沮丧,因为我到处寻找解决方案,上面的代码是我能想到的最好的代码,但显然不起作用。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

我建议将regmatchesregexpr#[^#]+(?!…)\\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)

请参阅demo on CodingGround

正则表达式意味着:

  • # - 文字#
  • [^#]+ - 除#之外的1个或多个字符(或\\w+仅匹配字母数字和下划线,或\\S+匹配任意数量的非空白字符)
  • (?!…)\\b - 匹配前面没有
  • 的字边界

上述代码执行的结果:[1] "#goodbye"