将模式后的字符串提取到未知停止点

Extract string after pattern to unknown stop point

在数据框中,我有一个名为 buckets 的列,其中包含符合以下模式的行:

{"21-45":1,"541-600":2,"46-60":2,"721-840":2,"1201 -1320":1}

{"21-45":7,"481-540":10,"541-600":6,"46-60":2,"721 -840":2}

{"481-540":1,"301-360":1,"<20":2,"61-120":1,"21-45":10}

{"481-540":1,"21-45":200,"721-840":1,"<20":3,"61- 120":2}

我希望提取遵循模式 "21-45":

的数字

所以我会剩下:

1

7

10

200

模式 "21-45": 可以出现在字符串中的任何位置,其后的数字位数各不相同,可能以“,”或“}结尾".

数据框非常大,所以我想尽可能节俭地完成它。我不知道解决这个问题的最佳方法是什么。

谢谢。

我们可以使用str_extract

library(stringr)
as.numeric(str_extract(str1, '(?<=21-45":)\d+'))
#[1]   1   7  10 200

数据

str1 <- c("{\"21-45\":1,\"541-600\":2,\"46-60\":2,\"721-840\":2,\"1201-1320\":1}", 
"{\"21-45\":7,\"481-540\":10,\"541-600\":6,\"46-60\":2,\"721-840\":2}", 
"{\"481-540\":1,\"301-360\":1,\"<20\":2,\"61-120\":1,\"21-45\":10}", 
"{\"481-540\":1,\"21-45\":200,\"721-840\":1,\"<20\":3,\"61-120\":2}"
)