正则表达式提取2个下划线之间的值,包括作为下划线的值

时间:2016-09-07 09:56:41

标签: regex r

我在R中工作并尝试提取用下划线分隔的字符串的一部分,包括下划线:

WRAP_384_p1_QC1_8
WRAP_384_p3_QC1_7   

我希望获得这样的输出:

1_QC1
3_QC1

我需要什么正则表达式来提取这些信息?

1 个答案:

答案 0 :(得分:2)

我们可以使用gsub匹配一个或多个字符(.*),后跟_后跟小写字母([a-z])或{{1} } |后跟一个或多个数字(_),直到字符串的结尾(\\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"