2012-08-02 99 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) 

,但它是从问题