如何在R中使用str_split()?

时间:2016-08-01 21:37:23

标签: r stringr

我想将这个字符串拆分为几个子字符串:

  

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

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

1 个答案:

答案 0 :(得分:5)

?regex

  

中缀运算符|可以连接两个正则表达式;生成的正则表达式匹配任何匹配子表达式的字符串。例如,abba|cde匹配字符串abba或字符串cde。请注意,替换在字符类中不起作用,其中|具有字面含义。

     

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

因此:

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

正如@ Frank所指出的那样,您可以在base::strsplit()中添加fixed=TRUE来执行此操作:

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包。一些奇妙的宝石外面的字符串迸发。