2016-09-06 28 views
2

我有這個矢量myvec。我想刪除第一個分隔符_之前的所有內容以及最後一個分隔符_(包括分隔符)之後的所有內容。我如何在R中獲得result如何刪除匹配模式或分隔符之前的第一個和最後一個項目R

myvec <- c("contamination_LPH-001-10_3.txt", "contamination_LPH-001-10_AK1_0.txt", 
"contamination_LPH-001-10_AK2_1.txt", "contamination_LPH-001-10_PD_2.txt", 
"contamination_LPH-001-10_SCC_4.txt") 

結果:

LPH-001-10, LPH-001-10_AK1,LPH-001-10_AK2,LPH-001-10_PD,LPH-001-10_SCC 

回答

3

我們可以使用gsub

gsub("^[^_]*_|_[^_]*$", "", myvec) 
#[1] "LPH-001-10"  "LPH-001-10_AK1" "LPH-001-10_AK2" 
#[4] "LPH-001-10_PD" "LPH-001-10_SCC" 

從字符串的開頭(^),我們是匹配的零個或多個字符不屬於_[^_]*)後跟_或(|)匹配_後跟ze ro或更多的字符串,它們不是_[^_]*)直到字符串的末尾($),並將其替換爲""


或者我們也可以使用捕捉組((...)),並用反向引用的捕捉組取代。

sub("^[^_]*_(.*)_[^_]*$", "\\1", myvec) 
#[1] "LPH-001-10"  "LPH-001-10_AK1" "LPH-001-10_AK2" 
#[4] "LPH-001-10_PD" "LPH-001-10_SCC" 
相關問題