R,使用正则表达式得到模式的第n个出现

时间:2015-12-28 23:34:52

标签: regex r grep

我有像:

这样的字符串
s <- "text-32190-3910-text-1671"

我想只获得第n次出现,例如第二个,一个模式,例如一组数字(数字,&#34; \ d +&#34;)。因此,s中第二次出现的数字会给我&#34; 3910&#34;。认为它必须简单地由grep()(和family)构造完成,但无法在SO(?)处找到示例。

编辑:另一个案例是:

s2 <- "jklsdKSfdkdlsKLLSDK-kdslkSKKSK"

然后我希望第三次出现大写字母[A-Z] +,在s2这将是&#34; SKKSK&#34;。

1 个答案:

答案 0 :(得分:4)

user20650使用gregexpr()regmatches()混合的评论是解决此问题的好方法:

R> s <- "text-32190-3910-text-1671"
R> regmatches(s, gregexpr("\\d+", s) )[[1]][2]
[1] "3910"
R> s2 <- "jklsdKSfdkdlsKLLSDK-kdslkSKKSK"
R> regmatches(s2, gregexpr("[A-Z]+", s2) )[[1]][2]
[1] "KLLSDK"
相关问题