在单词之间插入字符 - R语言

时间:2015-07-23 06:31:54

标签: regex r

我有一个数据集,其中一列的格式为[A-Z][A-Z][0-1][0-9][0-1][0-1][0-1][0-9][0-9],即AC1200019

现在我想将此格式转换为[A-Z][A-Z][-][0-1][0-9][-][0-1][0-1][0-1][-][0-9][0-9],即AC-12-000-19

3 个答案:

答案 0 :(得分:1)

([A-Z][A-Z])([0-1][0-9])([0-1][0-1][0-1])([0-9][0-9])

试试这个。$1-$2-$3-$4\\1-\\2-\\3-\\4。请参阅演示。

https://regex101.com/r/uK9cD8/5

答案 1 :(得分:1)

尝试

gsub('^([A-Z]{2})([0-1][0-9])([0-1]{3})([0-9]{2})', '\\1-\\2-\\3-\\4', str1)
 #[1] "AC-12-000-19"

数据

 str1 <- 'AC1200019'

答案 2 :(得分:0)

假设整个列的字符数相同,这里是一个简单的版本。

library(stringr)
x <- data.frame(X1 = c("AC1510018", "AC1200019", "BT1801007"))
paste(str_sub(x$X1,1,2), str_sub(x$X1,3,4),
      str_sub(x$X1,5,7), str_sub(x$X1,8,9) , sep= "-")

我喜欢dplyr套件,所以这里有一个使用dplyr和tidyr的版本:

library(dplyr)
library(tidyr)
x %>% 
  separate(X1, into = c("X2", "X3", "X4", "X5"), sep = c(2,4,7)) %>%
  unite("X1", X2, X3, X4, X5, sep="-")

x %>% 
  transmute(X2 = paste(str_sub(X1,1,2), str_sub(X1,3,4),
                       str_sub(X1,5,7), str_sub(X1,8,9) , sep= "-"))