R 查找并替换括号内的值 [duplicate]

R find and replace values inside brackets [duplicate]

提问人:Lucky sardar 提问时间:11/7/2023 更新时间:11/7/2023 访问量:37

问:

我想替换方括号内的字符串中的逗号,无法找到解决方案,我该如何使用 R 任何人请帮助我

“{group_boundaries:[0,2620,2883], sample_boundaries:[0,40,80]}”

我想要

“{group_boundaries:[0-2620-2883], sample_boundaries:[0-40-80]}”

谢谢

R 正则表达式 gsub

评论

1赞 Allan Cameron 11/7/2023
如果你的文本字符串被调用,你可以做。以副本形式关闭。strstringr::str_replace_all(str, "\\[[^\\]]*\\]", function(x) stringr::str_replace_all(x, ",", "-"))
0赞 r2evans 11/7/2023
@AllanCameron,我无法在复制链接中获得任何答案来处理这些数据,也许我做错了?(也许我应该在下面的那个欺骗链接中包含我的答案代码......
0赞 Allan Cameron 11/7/2023
@r2evans我在上面的评论中的代码适用于您调用的字符串 - try .我从 MrFlick 在链接的骗局中的回答中解脱出来(尽管略有调整)。当我关闭它时,我没有看到你的答案,如果我有,也不会打扰。我不介意你认为它应该重新开放。vecstringr::str_replace_all(vec, "\\[[^\\]]*\\]", function(x) stringr::str_replace_all(x, ",", "-"))
0赞 r2evans 11/7/2023
好吧,我一定是从另一个打错了,不用担心。实际上,我想我在您关闭它一分钟后单击了“提交”(答案),这是允许在 Stack 界面中 5 或 15 分钟内完成的,或者您将其作为欺骗关闭。@AllanCameron

答:

2赞 r2evans 11/7/2023 #1

基础 R 及其:gregexpr

vec <- "{group_boundaries:[0,2620,2883], sample_boundaries:[0,40,80]}"
gre <- gregexpr("\\[[^]]+\\]", vec)
regmatches(vec, gre)
# [[1]]
# [1] "[0,2620,2883]" "[0,40,80]"    
regmatches(vec, gre) |>
  lapply(gsub, pattern = ",", replacement = "-")
> 
# [[1]]
# [1] "[0-2620-2883]" "[0-40-80]"    
regmatches(vec, gre) <- regmatches(vec, gre) |>
  lapply(gsub, pattern = ",", replacement = "-")
vec
# [1] "{group_boundaries:[0-2620-2883], sample_boundaries:[0-40-80]}"

正则表达式:

"\\[[^]]+\\]"
 ^^^     ^^^  the literal brackets, escaped since they are used for regex classes
    ^^^^^     one or more of anything other than the close bracket