我想将这个字符串拆分为几个子字符串:
BAA33520.2 | /基因= “vpf402”/产物= “Vpf402” | GI:8272373 | AB012574 |加入{7347:7965, 0:591}
分隔符是| (ascii 124)。
它适用于所有其他分隔符,但不适用于此分隔符。
答案 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
包。一些奇妙的宝石外面的字符串迸发。