用相等数量的空格替换多个前导字符的本机正则表达式方法

Native regex way to replace multiple leading chars with equal number spaces

我有一些字符串,它们的间距是我想要的,但有我不想要的前导数字。 我想用相等数量的空格替换这些前导数字中的每一个,以保持间距。我可以使用 gsubfn 包来做到这一点但很好奇是否有原生的 R 正则表达式方法来完成此任务。

我可以仅使用本机 R 正则表达式函数实现与下面相同的结果吗?

MWE:

library(gsubfn)

string <- c(
    "1    12  end line", 
    "10   3   end line", 
    "50   444 end line", 
    "100  54  end line", 
    "1000 5   end line"
)

gsubfn('^\d+', function(x) gsub('\d', ' ', x), string)

期望的结果:

[1] "     12  end line"
[2] "     3   end line"
[3] "     444 end line"
[4] "     54  end line"
[5] "     5   end line"

您想用 space 替换字符串开头的每个单个数字。

使用

> gsub("\G\d", " ", string, perl=TRUE)
[1] "     12  end line" 
[2] "     3   end line" 
[3] "     444 end line"
[4] "     54  end line" 
[5] "     5   end line"

参见 online regex demo(稍微修改以使用多行字符串输入)。

\G\d 模式匹配字符串的开头或上一次成功匹配(使用 \G)的结尾,然后匹配被替换为 space 的数字。