【问题标题】:Speed up regex replace加快正则表达式替换
【发布时间】:2021-09-17 20:24:08
【问题描述】:

我有一个大数据框,我需要清理一个字符串列。一个同事写了一个函数,里面包含了几十个这样的语句:

  word <- gsub("#","",word)
  ...
  word <- gsub("&","",word)

除此之外几乎没有其他代码:

  word <- str_replace_all(word, "[[:punct:]]", "")
  word <- str_replace_all(word, "[^[:alnum:]]", "") 

  idx = rep(remove_numbers,length(word)) & grepl("\\D", word)
  word[idx] <- gsub("^\\d+|\\d+$", "", word[idx])

该功能需要很长时间才能完成。 我正在寻找加快速度的方法。我的想法:

  1. 有没有办法将多个这样的gsubs 组合成一个?即,像gsub("#|&amp;", "", word) 这样的正则表达式
  2. 函数的并行化应用

【问题讨论】:

  • remove_numbers 是什么?它是一个单一的逻辑值吗?
  • Mabe PCRE 比 TRE 快。设置 perl=TRUE 将从 TRE 切换到 PCRE:gsub("[^[:alnum:]]", "", word, perl=TRUE)

标签: r regex regexp-replace


【解决方案1】:

是的,你可以像你的例子一样组合正则表达式,是的,这应该会大大加快函数的速度。

除了写#|…|&amp;,你也可以使用字符类,写[#…&amp;],如果所有替换都涉及单个符号。

此外,不清楚您的同事为何突然从 gsub 切换到 str_replace_all。两者做同样的事情,所以你也可以合并这些语句。

但是,更重要的是,最后一个 str_replace_all 替换使所有其他替换变得多余,因为它删除了所有非字母数字字符。因此,在此之前删除单个非字母数字字符的所有内容都是不必要的。只需将其删除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-09
    • 2019-01-24
    • 2015-01-24
    • 1970-01-01
    • 1970-01-01
    • 2016-10-20
    • 1970-01-01
    相关资源
    最近更新 更多