我在R中工作并尝试提取用下划线分隔的字符串的一部分,包括下划线:
WRAP_384_p1_QC1_8
WRAP_384_p3_QC1_7
我希望获得这样的输出:
1_QC1
3_QC1
我需要什么正则表达式来提取这些信息?
答案 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"