我有一个带有以下元素的向量:
myvec<- c("output.chr10.recalibrated", "output.chr11.recalibrated",
"output.chrY.recalibrated")
Run Code Online (Sandbox Code Playgroud)
我希望有选择地提取chr之前.recalibrated和之后的值并得到result.
结果:
10, 11, Y
Run Code Online (Sandbox Code Playgroud)
你可以用一个单纯的sub:
> sub(".*?chr(.*?)\\.recalibrated.*", "\\1", myvec)
[1] "10" "11" "Y"
Run Code Online (Sandbox Code Playgroud)
模式匹配第一个之前的任何符号chr,然后匹配并捕获第一个之前的任何字符.recalibrated,然后匹配其余字符.在替换模式中,我们使用反向引用\1将所需的捕获值插入到结果字符串中.
请参阅正则表达式演示
作为替代方案,使用str_match:
> library(stringr)
> str_match(myvec, "chr(.*?)\\.recalibrated")[,2]
[1] "10" "11" "Y"
Run Code Online (Sandbox Code Playgroud)
它保留了所有捕获的值,并有助于避免模式中必需的昂贵的非锚定外观str_extract.
模式意味着:
chr - 匹配一系列文字字符 chr(.*?)- 匹配除换行符之外的任何字符(如果您还需要匹配换行符,请(?s)在模式的开头添加)直到第一行\\.recalibrated- .recalibrated文字字符序列.