我想捕捉第一次和第二次出现的' _'之间的字符。在这个字符串中:
C2_Sperd20A_XXX_20170301_20170331
那是:
Sperd20A
谢谢
答案 0 :(得分:4)
我们可以使用sub
来匹配字符串的开头(_
)之后的[^_]*
(^
)的零个或多个字符,后跟一个{ {1}}后跟一个或多个不是_
(_
)的字符将其捕获为组(([^_]+)
),后跟(...)
和其他字符,替换为捕获组的反向引用(_
)
\\1
或者在第2和第3 sub("^[^_]*_([^_]+)_.*", "\\1", str1)
#[1] "Sperd20A"
之间
_
或另一个选项是sub("*([^_]*_){2}([^_]+).*", "\\2", str1)
#[1] "XXX"
strsplit
如果它在第2和第3 strsplit(str1, "_")[[1]][2]
#[1] "Sperd20A"
之间
_
strsplit(str1, "_")[[1]][3]
#[1] "XXX"
答案 1 :(得分:1)
一个好的选择是使用stringr
包:
library(stringr)
s <- "C2_Sperd20A_XXX_20170301_20170331"
# (?<=foo) Lookbehind
# (?=foo) Lookahead
str_extract(string = s, pattern = "(?<=_)(.*?)(?=_)")
[1] "Sperd20A"