我正在使用以下向量:
vec <- c("[0.81, 1]", "0.00 - 0.03", "0.04 - 0.27", "0.28 - 0.5", "0.51 - 0.8")
我有兴趣修改值&#34; [0.81,1]&#34; 中的值,因此它对应的格式为数字 - 数字
目前,我以下列方式解决了这一要求:
vec <- gsub("\\[", "", vec, perl = TRUE)
vec <- gsub("\\]", "", vec, perl = TRUE)
vec <- gsub(",", " - ", vec, fixed = TRUE)
代码产生了所需的要求:
> vec
[1] "0.81 - 1" "0.00 - 0.03" "0.04 - 0.27" "0.28 - 0.5" "0.51 - 0.8"
我希望使用更复杂的gsub
来实现我的解决方案regex
。我想提出regex
语法:
gsubfn
,因此我对此解决方案不太热衷原则上我希望减少gsub
来电的数量。
我尝试过类似的东西:
\[(?![[:alnum:]])\]
- 它不匹配任何内容\[(.*)\]
- 似乎与整个事情匹配我想要实现的目标:
gsub
来电合并为一个答案 0 :(得分:3)
使用这样的捕获组:
sub("\\[(.*), (.*)\\]", "\\1 - \\2", vec)
## [1] "0.81 - 1" "0.00 - 0.03" "0.04 - 0.27" "0.28 - 0.5" "0.51 - 0.8"
以下是使用的正则表达式的可视化:
\[(.*), (.*)\]
答案 1 :(得分:1)
它不是一个正则表达式,也许一个regexpert会给出一个,但我将前两个调用与第二个调用结合起来:
v1 <- gsub("\\[|\\]","",gsub(","," -",vec))
请注意,我用&#34; - &#34;,而不是&#34; - &#34;因为你的逗号后面已经有空格了。