正则表达式在第n次到第n次之间找到

时间:2017-06-15 08:57:29

标签: r regex

我想捕捉第一次和第二次出现的' _'之间的字符。在这个字符串中:

  

C2_Sperd20A_XXX_20170301_20170331

那是:

  

Sperd20A

谢谢

2 个答案:

答案 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"