regex 在R中,使用stringr从[]括号内的字符串中提取值

wmvff8tz  于 2023-04-13  发布在  其他
关注(0)|答案(3)|浏览(133)
fetch_url = "https://www.website.com?splitArr=[43]&splitArrPitch=&position=P&statType=player&startDate=2023-03-28&endDate=2023-04-11&players=&filter=&groupBy=season"
start_date <- stringr::str_extract(fetch_url, "(?<=startDate=)[^&]+")
end_date <- stringr::str_extract(fetch_url, "(?<=endDate=)[^&]+")
stat_type <- stringr::str_extract(fetch_url, "(?<=statType=)[^&]+")
split_arr <- stringr::str_extract(fetch_url, "(?<=splitArr\\[)[^]]+")

我们成功地从这个字符串中提取出start_dateend_datestat_type,但是我们很难得到split_arr'43'。我们如何更新代码?
或者,对于fetch_url(例如https://www.website.com?splitArr=&splitArrPitch=&position=P&statType=player&startDate=2023-03-28&endDate=&players=&filter=&groupBy=season)作为第二个示例,对于split_arr以及end_date,这应该返回空字符串''
我们已经得到了前3个变量,但是splitArr周围的[]括号使这个变量更难获取。

thtygnil

thtygnil1#

[之前有一个=-代替regex查找,我们还可以捕获((...))并在group中指定捕获组

library(stringr)
str_extract(fetch_url, "splitArr=\\[(\\d+)", group = 1)
[1] "43"
6qftjkof

6qftjkof2#

我们可以把@jay.sf和@akrun的答案结合起来。

library(stringr)
str_extract(fetch_url, "(?<=\\[)\\d+(?=\\])")
[1] "43"

这适用于较旧的stringr包。
如果你需要为一个特定的参数提取一个值,你可以在后面的括号中包含它的名字。

str_extract(fetch_url, "(?<=splitArr=\\[)\\d+(?=\\])")
vxf3dgd4

vxf3dgd43#

向后看-向前看。

regmatches(fetch_url, regexpr('(?<=\\[).*(?=\\])', fetch_url, perl=TRUE))
# [1] "43"

相关问题