如何删除R中匹配模式或分隔符之前的第一个和最后一个项目

时间:2016-09-06 07:16:47

标签: r pattern-matching

我有一个名为myvec的向量。我想删除第一个分隔符_之前的所有内容以及最后一个分隔符_之后的所有内容(包括分隔符)。如何在R中执行此操作以获取result

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

1 个答案:

答案 0 :(得分: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"

从字符串的开头(^)开始,我们匹配的零个或多个字符不是_[^_]*),后跟_或( |)匹配_后跟零个或多个不是_[^_]*)的字符,直到字符串的结尾($)并替换它与""

或者我们也可以使用捕获组((...))并替换为捕获组的反向引用。

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