2016-09-14 203 views
0

我想在字符串中插入一次,两次或三次冒号字符。例如我想要使用R将字符插入字符串

G*2413 => G*24:13 
G*15122 => G*15:122 
G*010101 => G*01:01:01 
G*02010102 => G*02:01:01:02 

我该如何使用R来做到这一点?

have <- c('G*2413', 'G*15122', 'G*010101', 'G*02010102') 
want <- c('G*24:13', 'G*15:122', 'G*01:01:01', 'G*02:01:01:02') 
+0

('substring'和'? sprintf')或('?regepxr'和('?regmatches'或'?paste'))。你有没有尝试过任何东西? – r2evans

回答

1

我们还可以使用正环视

gsub("(\\d{2})(?=\\d{2})", "\\1:", have, perl = TRUE) 
#[1] "G*24:13"  "G*15:122"  "G*01:01:01" "G*02:01:01:02" 
+1

它的工作,谢谢。 – Mona

+0

@Mona请通过点击投票旁边的勾号来考虑接受最佳解决方案。它也会增加你的声望。 – akrun

+1

好的,我很抱歉我是这个论坛的新手 – Mona

2

你可以尝试用(\\d{2}(?!\\d?$))gsub,除了它后面是字符串的结束或后跟一位数字的字符串的结尾每两个数字与自身后跟一个冒号字符替换。 ?!是超前的负面看语法,这使得一定要匹配后面没有其他图案的模式:

gsub("(\\d{2}(?!\\d?$))", "\\1:", "G*02010102", perl=T) 
# [1] "G*02:01:01:02" 

gsub("(\\d{2}(?!\\d?$))", "\\1:", "G*010101", perl=T) 
# [1] "G*01:01:01" 

gsub("(\\d{2}(?!\\d?$))", "\\1:", "G*15122", perl=T) 
# [1] "G*15:122" 

gsub("(\\d{2}(?!\\d?$))", "\\1:", "G*2413", perl=T) 
# [1] "G*24:13" 
+0

这很好,谢谢 – Mona