2016-09-14 55 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