2016-08-01 97 views
-1

我想拆分此字符串中的几个子:如何在R中使用str_split()?

BAA33520.2 | /基因= “vpf402”/产品= “Vpf402” | GI:8272373 | AB012574 |加入{7347:7965, 0 :591}

分隔符是| (ascii 124)。
它适用于所有其他分隔符,但不适用于此分隔符。

+0

PS:分割函数根本不会分割该字符串,被用作分隔符。 – CLM

+0

你尝试失败了什么? – hrbrmstr

+1

你试过逃脱它吗?即'\\ |'' – aosmith

回答

5

?regex

两个正则表达式可以由缀运算符|接合;结果正则表达式匹配任何匹配任一子表达式的字符串。例如,abba|cde匹配字符串abba或字符串cde。请注意,交替在字符类中不起作用,其中|具有字面意思。

基本构建块是匹配单个字符的正则表达式。大多数字符(包括所有字母和数字)都是正则表达式,与自己匹配。任何具有特殊含义的元字符都可以在前面加一个反斜杠来引用。扩展正则表达式中的元字符是. \ | () [ {^$ * + ?,但请注意,这些是否具有特殊含义取决于上下文。

这样:

stringr::str_split('BAA33520.2|/gene="vpf402",/product="Vpf402"|GI:8272373|AB012574|join{7347:7965, 0:591}', "\\|") 

正如@Frank注意,您可以通过添加fixed=TRUE为此在base::strsplit()

strsplit('BAA33520.2|/gene="vpf402",/product="Vpf402"|GI:8272373|AB012574|join{‌​7347:7965, 0:591}',"|", fixed=TRUE) 

但是,您也可以通过装饰做到这一点与stringr::str_split()分隔符的正则表达式:

stringr::str_split('BAA33520.2|/gene="vpf402",/product="Vpf402"|GI:8272373|AB012574|join{7347:7965, 0:591}', 
        regex("|", literal=TRUE)) 

顺便说一句,stringr是非常简单,只是一个在这一点上略有友好的包装来stringi功能,我强烈建议学习stringi包,因为它包含字符串spiltting外一些精彩的宝石。

+1

在基础R中,您也可以设置fixed = TRUE来解决这个'strsplit('BAA33520.2 |/gene =“vpf402”,/ product =“Vpf402”| GI:8272373 | AB012574 |加入{7347:7965,0:591}',“|”,fixed = TRUE)'。似乎该选项不包含在stringr中。 – Frank

+0

亲爱的所有人,感谢您的建议,他们的工作非常好! – CLM

+0

+1。如果是这样的话,通常的做法是勾选答案标记,以便将来的搜索者知道答案可以解决问题 – hrbrmstr