替换文本中大于 5 位的数字

pro*_*rog 6 regex r gsub regex-group data-masking

a <- c("this is a number 9999333333 and i got 12344")
Run Code Online (Sandbox Code Playgroud)

我如何将大于 5 位的数字替换为额外的数字为“X”

预期输出:

"this is a number 99993XXXXX and i got 12344"
Run Code Online (Sandbox Code Playgroud)

我试过的代码:

gsub("(.{5}).*", "X", a)
Run Code Online (Sandbox Code Playgroud)

Wik*_*żew 8

您可以使用gsubPCRE 正则表达式:

(?:\G(?!^)|(?<!\d)\d{5})\K\d
Run Code Online (Sandbox Code Playgroud)

请参阅正则表达式演示。细节:

  • (?:\G(?!^)|(?<!\d)\d{5})- 前一个成功匹配的结尾 ( \G(?!^)) 或 ( |) 前面没有数字 ( (?<!\d)) 然后是任何五位数字的位置
  • \K - 匹配重置运算符丢弃到目前为止匹配的所有文本
  • \d - 一个数字。

请参阅R 演示

a <- c("this is a number 9999333333 and i got 12344")
gsub("(?:\\G(?!^)|(?<!\\d)\\d{5})\\K\\d", "X", a, perl=TRUE)
## => [1] "this is a number 99993XXXXX and i got 12344"
Run Code Online (Sandbox Code Playgroud)