我正在R中工作,并试图提取用下划线分隔的字符串的一部分,包括下划线:
WRAP_384_p1_QC1_8
WRAP_384_p3_QC1_7
我希望得到这样的输出:
1_QC1
3_QC1
我需要什么正则表达式来提取这些信息?
我们可以使用gsub
匹配一个或多个字符(.*
),然后是_
,然后是小写字母([a-z]
),或者|
和_
,然后是一个或多个数字(\d+
),直到字符串的末尾($
),并将其替换为空白(""
)。
gsub(".*_[a-z]|_\d+$", "", str1)
#[1] "1_QC1" "3_QC1"
或使用sub
捕捉组匹配一个或多个不强调的两个实例,后跟一个下划线(([^_]+_){2}
)从字符串的开始(^
),后跟一个小写字母([a-z]
),然后我们捕获组括号内((...)
)一个或多个数字(\d+
)其次是_
和一个或多个字母数字字符([[:alnum:]]+
)关闭捕获组架紧随其后下划线(_
)和一个或多个数字(\d+
)。我们将其替换为第二个捕获组(\2
)。
sub("^([^_]+_){2}[a-z](\d+_[[:alnum:]]+)_\d+", "\2", str1)
#[1] "1_QC1" "3_QC1"
数据str1 <- c("WRAP_384_p1_QC1_8", "WRAP_384_p3_QC1_7")