我想将此字符串拆分为几个子字符串:
BAA33520.2 |/gene ="vpf402",/ product ="Vpf402"| GI:8272373 | AB012574 | join {7347:7965,0:591}
分隔符是| (ascii 124).
它适用于所有其他分隔符,但不适用于此分隔符.
?regex
中缀运算符可以连接两个正则表达式
|; 生成的正则表达式匹配任何匹配子表达式的字符串.例如,abba|cde匹配字符串abba或字符串cde.请注意,交替在字符类中不起作用,字符类|具有字面意义.基本构建块是与单个字符匹配的正则表达式.大多数字符,包括所有字母和数字,都是与自身匹配的正则表达式.具有特殊含义的任何元字符都可以通过在其前面加上反斜杠来引用.扩展正则表达式中的元字符是
. \ | ( ) [ { ^ $ * + ?,但请注意这些元字符是否具有特殊含义取决于上下文.
从而:
stringr::str_split('BAA33520.2|/gene="vpf402",/product="Vpf402"|GI:8272373|AB012574|join{7347:7965, 0:591}', "\\|")
Run Code Online (Sandbox Code Playgroud)
正如@ Frank所说,你可以base::strsplit()通过添加fixed=TRUE:
strsplit('BAA33520.2|/gene="vpf402",/product="Vpf402"|GI:8272373|AB012574|join{??7347:7965, 0:591}',"|", fixed=TRUE)
Run Code Online (Sandbox Code Playgroud)
但是,您也可以stringr::str_split()通过修饰分隔符的正则表达式来执行此操作:
stringr::str_split('BAA33520.2|/gene="vpf402",/product="Vpf402"|GI:8272373|AB012574|join{7347:7965, 0:591}',
regex("|", literal=TRUE))
Run Code Online (Sandbox Code Playgroud)
顺便说一句,在这一点上stringr几乎只是一个稍微友好的stringi功能包装器,我强烈建议研究stringi包,因为它包含一些奇妙的宝石,除了字符串spiltting.