[英]R: regular expression lookaround(s) to grab whats between two patterns
这与您的想法有些不同,但是可以完成工作。
gsub("(.*class-)|(.)|(_sample.*)", "\\2", x)
逻辑如下,您有3组“字符串”:
1)字符.*
期末class-
2)字符.
3)以_sample
字符和后缀.*
字符
从那些您想要保留第二个“集合” \\\\2
。
或者另一个可能更容易理解:
gsub("(.*class-)|(_sample.*)", "", x)
接受以class-
结尾的任意数量的字符,字符串_sample
后跟任意数量的字符,然后将它们替换为NULL
字符""
我们可以使用str_extract_all
从library(stringr)
library(stringr)
unlist(str_extract_all(x, '(?<=class-)[^_]+(?=_sample)'))
#[1] "X1(z)20" "Z3(z)29"
如果字符串中有模式的多个实例,这也应该起作用
x1 <- paste(x, x)
str_extract_all(x1, '(?<=class-)[^_]+(?=_sample)')
#[[1]]
#[1] "X1(z)20" "X1(z)20"
#[[2]]
#[1] "Z3(z)29" "Z3(z)29"
基本上,我们匹配两个环视( (?<=class-)
和(?=_sample)
)之间的字符。 我们提取不是_
字符(基于示例),该字符前面是class-
, _sample
是_sample
。
gsub('.*-([^-]+)_.*','\\1',x)
[1] "X1(z)20" "Z3(z)29"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.