使用正则表达式,如何在r中找到匹配后添加元素?

问题描述 投票:-1回答:1

我有一个列,其中有一串长度范围为10和11的数字。这是一个列中一些值的例子。

column=c("5699420001","00409226602")

我如何在前四位数字后面加上连字符(10个字符的字符串)和前五位数字(11个字符的字符串),以及在两个长度的后四位数字后面加上连字符? 下面是输出结果。我想使用 stringr 为这个。

column_standard=c("5699-4200-01","00409-2266-02")
r regex stringr
1个回答
1
投票

下面是一个使用捕获组的解决方案 stringr's str_replace() 函数。

library(stringr)

column <- c("5699420001","00409226602")

column_standard <- sapply(column, function(x){
  ifelse(nchar(x) == 11, 
         stringr::str_replace(x, "^([0-9]{5})([0-9]{4})(.*)", "\\1\\-\\2-\\3"),
         stringr::str_replace(x, "^([0-9]{4})([0-9]{4})(.*)", "\\1\\-\\2-\\3"))
})

column_standard

#     5699420001     00409226602 
# "5699-4200-01" "00409-2266-02"

代码应该是不言自明的。我可以根据要求提供详细的解释。


1
投票

试着用这个作为你的表达式。

\b(\d{4,5})(\d{4})(\d{2}\b)

它设置了三个捕获组,你可以在以后的替换中使用它们,以方便在它们之间添加连字符。

然后你只需用替换。

\1-\2-\3

感谢 @Dunois 指出了它在代码中的作用。

column_standard <- sapply(column, function(x) stringr::str_replace(x, "^(\\d{4,5})(\\d{4})(\\d{2})", "\\1\\-\\2-\\3"))

下面是一个实况 例子.

© www.soinside.com 2019 - 2024. All rights reserved.