匹配 gsub/r 中的最后一个和第一个括号,并保持其余内容不变

Matching last and first bracket in gsub/r and leaving the remaining content intact

我正在使用以下格式的字符向量:

[-0.2122,-0.1213)
[-0.2750,-0.2122)
[-0.1213,-0.0222)
[-0.1213,-0.0222)

我想删除 [) 以便我可以获得类似于以下的所需结果:

-0.2122,-0.1213
-0.2750,-0.2122
-0.1213,-0.0222
-0.1213,-0.0222

尝试次数

1 - 群组,

我正在考虑捕获第一组和第二组,语法如下:

[[^\[{1}(?![[:digit:]])\){1}

但它似乎不起作用,(regex101)。

2 - 标点符号

代码:[[:punct:]] 将捕获所有标点符号 regex101

3 - 再次分组

然后我尝试匹配两组:(\[)(\)),但是,同样,不缺少 regex101


通过应用 gsub 两次或使用 qdap 包中可用的 multigsub 可以轻松解决问题,但我有兴趣解决通过一个表达式,这是可能的。

您可以尝试在 Perl-style 正则表达式中使用先行和后行。

x <- scan(what = character(), 
text = "[-0.2122,-0.1213)
[-0.2750,-0.2122)
[-0.1213,-0.0222)
[-0.1213,-0.0222)")

regmatches(x, regexpr("(?<=\[).+(?=\))", x, perl = TRUE))
# [1] "-0.2122,-0.1213" "-0.2750,-0.2122" "-0.1213,-0.0222" "-0.1213,-0.0222"