[英]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.