2016-08-01 20 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