2012-08-02 96 views
2

我想了解更多關於正則表達式(通過一些教程工作)在R中,並遇到了一些我不能上班的東西。我試圖抓住2個字符之間的東西(包括那些字符並替換它們)。有人可以幫助我從這些正則表達式中獲得理想的行爲嗎?正則表達式字符跨度

d <- c("xtfo_oin5h;lx", "6b_arin;7", "xin;7") 
gsub("t.+?l", "HERE", b) 
gsub("_.+?\\;", "HERE", b) 

Desired outcomes for these two statements: 
[1] "xHEREx" "6b_arin;7" "xin;7" 
[1] "xtfoHERElx" "6bHERE7"  "xin;7" 
+1

也許因爲你是'gsub'bing矢量'b'而你的實際矢量是'd'? – A5C1D2H2I1M1N2O1R2T1 2012-08-02 12:44:08

+0

另外,我認爲第一種模式的理想結果應該是:[1]「xHEREx」「6b_arin; 7」「xin; 7」'。 'gsub'沒有任何東西可以解決從'd'中的第二項和第三項中刪除分號的問題。 – A5C1D2H2I1M1N2O1R2T1 2012-08-02 12:51:47

+0

這是很抱歉的麻煩。 mrdwab可以發佈解決方案嗎?我很想念不同的教程,我無意中複製了錯誤的字符串。 – 2012-08-02 12:56:04

回答

4

有點不清楚看起來這是換位只是一個小問題,在這種情況下,對於一個d弄錯一個b。 ;-)

gsub("t.+?l", "HERE", d) 
gsub("_.+?\\;", "HERE", d) 

按預期工作!

> gsub("t.+?l", "HERE", d) 
[1] "xHEREx" "6b_arin;7" "xin;7"  
> gsub("_.+?\\;", "HERE", d) 
[1] "xtfoHERElx" "6bHERE7" "xin;7" 
0

也許

gsub("(.*)t.+?l(.*)", "\\1HERE\\2", d) 

gsub("(.*)_.+?\\;(.*)", "\\1HERE\\2", d) 

,但它是從問題