R - 将函数应用于正则表达式匹配

时间:2018-05-20 17:32:15

标签: r regex gsub

我们说我有一个像这样的字符串:

txt <- "This is an example of a Tweet with a #HashTag."

我想通过正则表达式找到每个标签。我不仅要更换&#34;#&#34;使用标记<hashtag>。我还想应用一个函数来进一步预处理每个#标签的内容(#34;#&#34;在标签中),如下所示:

  pp_hashtag = function(hashtag) {
    ifelse(
      grepl("^[[:upper:]]+$", hashtag),
      paste(hashtag, "<allcaps>"),
      gsub("(?<!^)(?=[A-Z])", " ", hashtag, perl = T)
    )
  }

如果可能,上述函数会将主题标签分解为组成单词,如果不是,因为它包含所有大写字母,请将其标记为。

我该怎么做?如果有更好的方法,我也可以这样做。

1 个答案:

答案 0 :(得分:-1)

tweet_preprocessor = function(tweets_txt) {
  pp_hashtag = function(hashtag) {
    hashtag = substring(hashtag, 2)
    paste("<hashtag>", ifelse(
      grepl("^[[:upper:]]+$", hashtag),
      paste(hashtag, "<allcaps>"),
      gsub("(?<!^)(?=[A-Z])", " ", hashtag, perl = T)
    ))
  }
  gr = gregexpr("#\\w+", tweets_txt, perl = T)
  mat = regmatches(tweets_txt, gr)
  regmatches(tweets_txt, gr) = lapply(mat, pp_hashtag)
  tweets_txt
}

知道了。只需使用gregexprregmatches