繁体   English   中英

R-将功能应用于正则表达式匹配

[英]R - Apply function to regex match

假设我有一个像这样的字符串:

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

我想通过正则表达式查找每个主题标签。 我不仅要用标记<hashtag>替换“#”。 我还想应用一个函数来进一步预处理每个主题标签的内容(主题标签中“#”之后的所有内容),如下所示:

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

如果可能的话,上面的函数将主题标签分解为组成词,或者如果不是因为包含所有大写字母,则将其标记。

我怎样才能做到这一点? 如果有更好的方法可以做到这一点,我也很乐意。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM