什么正则表达式函数有助于将数字添加到现有数字? [复制]

Posted

技术标签:

【中文标题】什么正则表达式函数有助于将数字添加到现有数字? [复制]【英文标题】:What regular expression function helps add a number to existing number? [duplicate] 【发布时间】:2021-09-19 18:33:11 【问题描述】:

我的数据集中有一列包含一堆数字,长度为五个或六个数字,如下所示。但是,所有这些都需要六个数字。我拥有的数据集来自将多个 excel 组合在一起,五个长数字中的前导“0”在某些 excel 中消失了,但在其他中没有,所以我需要将它读到五个长数字中。所以我需要一个函数来找到任何长度为五个数字的数字,然后在开头添加一个 0,因此“49302”变成 049302”,但保留六个数字长的观察结果。关于如何使用 gsub 或其他函数的任何想法在大型数据集上执行此操作?

49302 038503 594030 39845 503932 334922 49403 84034

【问题讨论】:

【参考方案1】:
x <- c(49302,038503,594030,39845,503932,334922,49403,84034)

df <-
  tibble(x = x)

library(dplyr)

df %>% 
  mutate(x = if_else(nchar(x)==5,paste0(0,x),as.character(x)))

# A tibble: 8 x 1
  x     
  <chr> 
1 049302
2 038503
3 594030
4 039845
5 503932
6 334922
7 049403
8 084034

【讨论】:

【参考方案2】:

我们可以使用sprintf

df1$col1 <- sprintf('%06d', as.numeric(df1$col1))

-输出

> df1
    col1
1 049302
2 038503
3 594030
4 039845
5 503932
6 334922
7 049403
8 084034

或者,如果我们需要一个正则表达式,捕获从开头 (^) 到结尾 ($) 的 5 位数字并替换为 0 及其反向引用 (\\1)

df1$col1 <-  sub("^(.....)$", "0\\1", df1$col1)
df1$col1
[1] "049302" "038503" "594030" "039845" "503932" "334922" "049403" "084034"

数据

df1 <- data.frame(col1 = c(49302, 38503, 594030, 39845, 503932, 334922, 49403, 84034))

【讨论】:

以上是关于什么正则表达式函数有助于将数字添加到现有数字? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

可以将特定数字添加到一堆“时间”字符串中,在正则表达式中完成

xslt将正则表达式中的数字添加到节点值

使用 pyspark 中的正则表达式将数字添加到字符串中最后一个字符之前的字符串

将一个系列中的数字添加到同一数据框中的一系列字母,可能使用正则表达式

使用 preg_match_all 将所有数字与正则表达式匹配

notepad++正则表达式使数字自动增加