2017-06-01 83 views
0

我想用DM*13:01:01:01替換DM*13:01:01:02。但是,我的腳本也將DM*11:01:01:01, DM*03:01:01:01, DM*01:01:01:01更改爲DM*13:01:01:01。我不希望這些改變使用R替換字符串中的數字值

腳本使用:

> papST$DM_c1 <-gsub("[DM*]\\d[13][:]\\d[01][:]\\d[01][:]\\d[02]", "*13:01:01:01", papST$DM_o1, perl = TRUE) 
+2

你應該嘗試進入你的正則表達式轉換爲https://regex101.com/這樣的幫助工具。你的正則表達式包含了很多對我沒有意義的事情,特別是如果你基本上想要匹配一個固定的字符串。 – Marius

+0

'\\ d'表示任何數字。 '[xy]'匹配任何字符'x'或'y'。所以'\\ d [13]'匹配01,03,11,13,21,23 ....等等。爲什麼不只是'gsub(「DM * 13:01:01:02」,「DM * 13:01:01:01」,papST $ DM_o1,fixed = TRUE)'? – thelatemail

+0

謝謝,我的問題是我試圖讓一個相對簡單的替代複雜化。 – Mona

回答

1

基於你給出的例子,你並不需要使用任何花哨的正則表達式的特點做具體的更換你已經提到。你需要在你的模式中的唯一的事情是一個反斜槓,這樣*沒有得到視爲一個特殊字符:

x = c("DM*13:01:01:02", "DM*11:01:01:01", "DM*03:01:01:01", "DM*01:01:01:01") 
gsub("DM\\*13:01:01:02", "DM*13:01:01:01", x) 

如果有需要更換,比如你要替換結尾的所有值更值在02中,那麼您可能需要在正則表達式中引入一些「模式匹配」功能,但重要的是不要過分複雜。

僅供參考,以你的字符串代替所有02 S,你可以使用使用$一個簡單的正則表達式,它在一個字符串的結尾相匹配:

gsub("02$", "01", x) 
+0

偉大的簡單的腳本的作品,我會記住這對未來。謝謝! – Mona