我想從包含不同長度識別符號的串列中提取字串。本質上,我想將識別符號的所有字符保留到第 3 次出現“-”,除了最后的字母表,并洗掉其余字符。串列示例如下:
mylist <- c("abc-nop-7a-2","abc-nop-7b-3p", "abc-nop-18a-5p/18c-5p", "abc-xyz-198_5p")
我希望結果串列如下所示:
result <- c("abc-nop-7","abc-nop-7", "abc-nop-18", "abc-xyz-198")
我曾嘗試拆分字串,然后獲取我想要的部分,但我不確定如何將部分呼叫到某個點。我試過了:
mylist <- gsub("-", "_", mylist) #"-" was not not acceptable as a character
mylist <- strsplit(mylist, "_")
sapply(mylist, `[`, 3)
但是,當然,上面只給了我這樣的東西:
"7","7", "18", "198"
有沒有辦法呼叫我在上面的方法中拆分的提取 1~3 部分?或者如果有更有效的方法可以通過 stringr 或其他方式完成任務,我也會很感激。
提前致謝。
uj5u.com熱心網友回復:
我們可以作為一個組捕獲并替換為反向參考 ( \\1)
sub("^(([^-] -){2}[0-9] ).*", "\\1", mylist)
[1] "abc-nop-7" "abc-nop-7" "abc-nop-18" "abc-xyz-198"
匹配的模式是兩個 ( ) 不是( ){2}的字符實體,后跟從字串開頭 ( ) 開始的 a ,后跟一個或多個數字 ( ),捕獲 ( ) 并在替換中指定捕獲組-[^-] -^[0-9] (...)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/446292.html
