删除所需字符串前后匹配模式的字母

MAP*_*APK 0 regex r

我有一个带有以下元素的向量:

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)

Wik*_*żew 7

你可以用一个单纯的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文字字符序列.