R:替换下划线非连续重复两次以上

时间:2018-12-08 00:34:52

标签: r regex

我收到了一个数据集,其中包含由下划线连接的短语,如下所示:

text <- "hi, how_are_you? that's_great. yes_i'm_als0_@k"

在此示例中,数据包含数字,符号,标点和空格。我想用下划线替换下划线出现3次或更多次(如yes_i'm_als0_@k中的下划线)。所需的输出是:

"hi, how_are_you? that's_great. yes i'm als0 @k"

另一种表达方式,我收到了一个带有硬编码ngram的数据集,我想保留unigram,bigrams和trigram。

1 个答案:

答案 0 :(得分:1)

gsubfn类似于gsub,但不是将第一个参数中指定的正则表达式替换为固定字符串,而是将匹配项传递给第二个参数中指定的函数,将输入替换为函数的输出。该函数可以用公式表示法指定,其中函数的主体位于右侧,而参数{此处为s是通过在右侧找到自由变量来确定的。

library(gsubfn)

gsubfn("\\S+", 
  ~ if (length(unlist(gregexpr("_", s))) >= 3) gsub("_", " ", s) else s, 
  text)

给予:

[1] "hi, how_are_you? that's_great. yes i'm als0 @k"